gridcontrol---->主从模式

1.gridview设置

//不显示分组的面板
 gridView1.OptionsView.ShowGroupPanel = false;

//自动改变行高适应内容
gridView1.OptionsView.RowAutoHeight = true;

//允许自动合并单元格
gridView1.OptionsView.AllowCellMerge = true;

//如果主从表中,没有找到从表内容也要显示(默认是不显示的)
gridView1.OptionsDetail.AllowExpandEmptyDetails = true;


//使得GridView不能编辑
gridView1.OptionsBehavior.Editable = false;

//内置编辑器显示的模式
gridView1.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click;

//主从表显示的功能是否可用
//gridView1.OptionsDetail.EnableMasterViewMode = false;

//如果显示了主从表,每点开个加号,就会显示一个Tabs,里面往往显示了两个面板。
//事实上没必要这样干的。一般选择关闭。关闭的对象是主GridView的此项属性。
gridView1.OptionsDetail.ShowDetailTabs = false;

//------------------------------------------------------------------------------------------

2.核心代码

DataSet ds22 = new DataSet();
DataTable dt2 = bll.Select_12().Copy();
dt2.TableName = "table1";
ds22.Tables.Add(dt2);
DataTable dt = bll.Select_16_5().Copy();
dt.TableName = "table";
ds22.Tables.Add(dt);
DataRelation dr = new DataRelation("批注", ds22.Tables["table1"].Columns["newId"], ds22.Tables["table"].Columns["newsId_release"]);
ds22.Relations.Add(dr);
gridControl1.DataSource = ds22.Tables[0];//设定主表

注:刷新数据时核心代码前添加【this.gridControl1.DataSource=null】

3.GridControl 主从模式(Master-detail)子表格获取行数据

DevExpress.XtraGrid.Views.Grid.GridView currentView = (DevExpress.XtraGrid.Views.Grid.GridView)this.gridControl1.FocusedView; // DataRow focusRow = currentView.GetFocusedDataRow(); var res = currentView.GetRow(e.RowHandle) as ClassB; MessageBox.Show(res.IDB);

4.从表修改

private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            DevExpress.XtraGrid.Views.Grid.GridView currentView = (DevExpress.XtraGrid.Views.Grid.GridView)this.gridControl1.FocusedView;
            DataRow focusRow = currentView.GetFocusedDataRow();
            var newid = focusRow[0];
            var content1 = focusRow[1];
            bll.Update_2_1("content1", content1.ToString(), newid.ToString());
        }

展开和折叠:

折叠:

(gridControl1.MainView as GridView).CollapseAllDetails(); //要折叠主视图中的所有主控行

展开:

  XtraGrid 没有提供为单个视图展开所有主控行的方法。 但是,可以编写程序来实现

public void ExpandAllRows(GridView view)
{
    view.BeginUpdate();
    try
    {
        int dataRowCount = view.DataRowCount;
        for (int rHandle = 0; rHandle < dataRowCount; rHandle++)
            view.SetMasterRowExpanded(rHandle, true);
    }
    finally
    {
        view.EndUpdate();
    }
}

:关键名必须与设计GridView的层级关系的level name相同

DataRelation dr = new DataRelation("批注", ds22.Tables["table1"].Columns["newId"],中的批注

遇到问题:

1.名为“ds”的 DataTable 已属于此 DataSet。

名为“ds”的 DataTable 已属于此 DataSet。 - 撒娇的小熊 - 博客园

解决关键

dt.TableName = "table";//datatable重新命名

2.把DataTable添加到DataSet中时出现“DataTable 已属于另一个 数据集”

DataTable table = table2.Copy();

3.分层加号及禁用设置 

加号显示
GridView1.OptionsDetail.EnableMasterViewMode =true
加号不显示
GridView1.OptionsDetail.EnableMasterViewMode = False 

参考

DEV—【GridControl主从表】 - seaconch - 博客园

gridcontrol主从表设计_weixin_38169798的博客-CSDN博客

GridControl主从表设置_yunanzhe987的专栏-CSDN博客

GridControl绑定并显示主从表。 - 記號 - 博客园

案例参考

链接:https://pan.baidu.com/s/1it2FM5pdDMdbiFnPFjVPLw 
提取码:qmdo

猜你喜欢

转载自blog.csdn.net/caoyanchao1/article/details/121436376