2017-01-04 4 views
0

Родитель этой сетки: Проект с ребенком Спецификация. Мне удалось отобразить дочернюю сетку, используя следующий код.Удалить столбец из детского сетки

private void gridView_MasterRowEmpty(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowEmptyEventArgs e) 
    { 
     Project projects = (Project)gridView.GetRow(e.RowHandle); 
     e.IsEmpty = projects.BOMs.Count == 0; 
    } 

    private void gridView_MasterRowGetRelationCount(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowGetRelationCountEventArgs e) 
    { 
     e.RelationCount = 1; 
    } 

    private void gridView_MasterRowGetRelationName(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowGetRelationNameEventArgs e) 
    { 
     e.RelationName = "BOMs"; 
    } 

    private void gridView_MasterRowGetChildList(object sender, DevExpress.XtraGrid.Views.Grid.MasterRowGetChildListEventArgs e) 
    { 
     Project projects = (Project)gridView.GetRow(e.RowHandle); 
     e.ChildList = new BindingSource(projects, "BOMs"); 
    } 

Однако код показывает мне все столбцы. Я хотел бы скрыть некоторые столбцы от ребенка, который является Спецификация.

Единственный способ я нашел, чтобы использовать что-то вроде ниже

dataGridView1.Columns[index].Visible = false; 

Но где я должен поместить код выше?

Обновленный код

private void gridView_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e) 
{ 
    GridView gridView = sender as GridView; 
    GridView detailView = (GridView)gridView.GetDetailView(e.RowHandle, e.RelationIndex); 
    detailView.Columns["Column Name"].Visible = false; 
} 

ответ

0

Чтобы выполнить ваши потребности необходимо обработать метод Grid_MasterRowExpanded в вашем GridControl:

private void Grid_MasterRowExpanded(System.Object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e) 
{ 
    GridView view = sender; 
    GridView detail = view.GetDetailView(e.RowHandle, e.RelationIndex); 

    if (e.RowHandle == 0 | e.RowHandle == 1) { 
     if (detail.Name == "BOM") { 
      detail.Columns["Column Name"].Visible = false; 
     } 
    } 
} 
+0

Спасибо за ваш ответ. Ваш ответ дал мне направление. Однако я внес некоторые изменения в это. Проверьте обновленный код. – active92

0

FYI, вы также можете сделать это во время разработки, который мой любимый способ пойти. В дизайнере gridView вы должны убедиться, что вы создаете gridView для мастера и дочернего элемента. Нажав «Получить детали», вы сделаете это. Он также удалит все столбцы, которые вы уже создали, вместе с макетом, но простой способ заключается в том, чтобы сохранить макет как XML, нажмите «Получить детали», а затем повторно загрузите XML.

Вот что ваш дизайнер будет выглядеть после того, как вы сделаете это:

enter image description here

Здесь вы можете нажать на каждого GridView (мастера и ребенка отдельно) и настроить каждый - изменение ширины столбцов , скрывать столбцы, столбцы DELETE (данные все еще существуют, но невозможно добавить пользовательский интерфейс в сетку), переупорядочить столбцы и т. д.

И лучшая часть - без кода.

+0

Я пробовал это, но почему-то, когда я нажимаю «Получить данные», ребенок не появляется. Поэтому я попытался использовать код вместо этого. Может быть, потому, что я использую EF. – active92