从子gridview中删除列

时间:2017-01-04 08:06:01

标签: c# entity-framework gridview devexpress

此网格的父级是项目,而子级是 BOM 。我已经设法使用以下代码显示子网格。

    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");
    }

但是,代码显示了所有列。我想隐藏孩子的一些列 BOM

我发现的唯一方法是使用下面的内容

 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;
}

2 个答案:

答案 0 :(得分:0)

为了满足您的需求,您必须处理GridControl中的Grid_MasterRowExpanded方法:

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;
        }
    }
}

答案 1 :(得分:0)

仅供参考,你也可以在设计时这样做,这是我最喜欢的方式。在gridView设计器中,您需要确保为master和child创建gridView。单击“检索详细信息”将执行此操作。它还会删除您已经创建的任何列以及布局,但是简单的方法是将布局保存为XML,单击“检索详细信息”,然后重新加载XML。

以下是您的设计师在您执行此操作后的样子:

enter image description here

从这里,你可以点击每个gridView(主人和孩子分别)并自定义每个 - 更改列宽,隐藏列,删除列(数据仍然存在,但UI无法添加到网格中) ,重新排列等等。

最好的部分 - 没有代码。