DEV GridView嵌套

来源:互联网 发布:联通网络服务商电话 编辑:程序博客网 时间:2024/06/09 22:54

最近DEV搞的多,想把程序做得看起来专业点,所以稍微研究了一下。

本篇只记录如何实现在列表里面点击某一行可以打开这一行关联的子表内容。效果如下:


下面是实现过程:

1.设计器里面:


在MainView下面新建一个EntryView(create a new level) 这样这个gridControl里面就有2个gridView了。

然后打开你的设计器(Run Designer)

如果你只是测试,或者甲方对美丑没要求时,对,你神马都不需要设置了。


2.绑定数据

和正常的绑定一样,gridControl.Datasource = DataSet.table[0]; 

不同的是,这个DataSet里面要有2个表,table1和table2需要是主从表的关系(主表有个字段是从表的外键,形成关系),比如:就不比如了,有点懒。

存储过程:

select OutStockPlan.* from T_OutStock_Plan  as OutStockPlan where OutStockPlan.BillDate< @maxDate_Invo and OutStockPlan.BillDate> @minDate_Invo
   
select ospe.* from T_OutStock_Plan as osp
left join T_OutStock_Plan_Entry ospe on osp.OnlyID=ospe.VoucherID
where osp.BillDate< @maxDate_Invo and osp.BillDate> @minDate_Invo

一个存储过程同时返回2个表,第一条语句返回主表的行,第二条语句返回这些主表信息对应的子表行。只要不嫌麻烦,你要分开执行也可以,我还是有点懒。

Access执行:

 WMSDS relationDS = this._WMSAccess.Select_OutPlanAndEntry_Relation(dateS, dateE); //执行上面的存储过程,返回一个DataSet,包含table1和table2


 DataRelation dr = new DataRelation("通知分录", new DataColumn[] { relationDS.T_OutStock_Plan.Columns["OnlyID"] }, new DataColumn[] { relationDS.T_OutStock_Plan_Entry.Columns["VoucherID"] });   //new一个表关系,绑定2个表的键
          

 relationDS.Relations.Add(dr);    //添加表关系到dataset

前台绑定:
 grid_VoucherPlanList.DataSource = relationDS.Tables["T_OutStock_Plan"]; //把主表当成datasource绑定给gridControl


收工。


追加:AllowOnlyOneMasterRowExpanded = True  那么同时只能展开一行,如果是false就可以任意展开。


如果不想显示那个通知分录的tab,可以设置ShowDetailTabs为false。 不过为毛是展开一个tab呢?是不是意味着一个主表关联多个子表的时候可以同时展开,我懒不试了。


再次追加:ColumnAutoWidth属性, 当子View里面想bestFitColumn的时候,需要把子表的ColumnAutoWidth设置为false。 但是如果主View的ColumnAutoWidth设置为True的时候,子表的设置将无效, 所以想把列宽都fit的话2个view都设置为false吧。


再再次追加:如果想隐藏子View中的某一列的话,添加主View事件,如下:

 private void gridView1_MasterRowExpanded(object sender, DevExpress.XtraGrid.Views.Grid.CustomMasterRowEventArgs e)
        {
            DevExpress.XtraGrid.Views.Grid.GridView aView = gridView1.GetDetailView(e.RowHandle, e.RelationIndex) as DevExpress.XtraGrid.Views.Grid.GridView;


            if (aView != null)
            {
                aView.Columns["VoucherID"].Visible = false;    //aView就是子View,设置VID 列为隐藏
                aView.BestFitColumns();
            }
        }


0 0