Как спрятать некоторые карты в 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;
}
Другие вопросы по тегам