Как спрятать некоторые карты в DevExpress Master Detail DataGrid?
Я хотел бы показать некоторые (но не все) данные в DataGrid, заполненные списком RowValues:
public class RowValue
{
public int id;
public string name;
public List<A> list1;
public List<B> list2;
}
public class A
{
public int id;
public string val1;
public string val2;
...
}
public class B
{
public int id;
public string val1;
public string val2;
...
}
Когда я раскрываю строку в Master-Detail DataGrid, я вижу две карточки, показывающие строки для каждого списка (list1 и list2). Я хотел бы скрыть list1 от просмотра в моей DataGrid. На данный момент я могу скрыть все столбцы в списке list1, но пустая карточка с заголовком все еще загрязняет GridView.
void gridView_MasterRowExpand(object sender, CustomMasterRowEventArgs e)
{
var masterView = sender as GridView;
GridView detailView = masterView?.GetDetailView(e.RowHandle, e.RelationIndex) as GridView;
if(detailView == null) return;
//disabling Columns
if(detailView.LevelName == "list1")
foreach(var column in detailView.Columns)
column.Visible = false;
}
Я попробовал ViRuSTriNiTy совет, чтобы использовать AppearanceAttribute:
[Appearance("Data", Visibility = ViewItemVisibility.Hide, Context="Any"]
но это тоже не помогает.
Чтобы проиллюстрировать мою проблему, я прилагаю картинку с карточкой, в которой удалены все столбцы.
1 ответ
Я успешно справляюсь с этой задачей. Самый простой, на мой взгляд, ответ - установить для e.IsEmpty Arg значение true в событии MasterRowEmpty. Смотрите код ниже:
void gridView_MasterRowEmpty(object sender, MasterRowEmptyEventArgs e)
{
GridView view = sender as GridView;
if(view.GetRelationName(e.RowHandle, e.RelationIndex) == "list1") // == "Card Name"
e.IsEmpty = true;
}