要实现的效果如上图所示,其实主从表是同一条记录,但是客户名称、地址需要独立的显示出来。所以实现方法如下:
设计的主表为GridView,从表为CardView
XtraGrod主要设置的项有
MainView下的OptionDetail
AllowZoomDetail:是否允许放大子表。界面上表现是在记录最后面有个放大镜
ShowDetailTabs:是否现在子表Tab,界面上表现将子表的记录都显示在一个Tab页里面,而且有边框,Title设置
EnableMasterViewMode:是否可用主从表模式。如果设为false,子表不会显示
CardView下的设置
CardInterval:各个卡片的间距
CardWidth:卡片宽度,如果在属性里面设置。
DetailHeight:卡片高度,最小只能设置到50。所以要设置比50更小的值的话,可以通过代码赋值
DetailTabHeaderLocation:卡片标题位置
ViewCaption:Tab标题,如果没有设置,默认取该子表的Level的名字
CardCaptionFormat:卡片Caption
对OptionView下的属性设置
ShowCardCaption:是否显示卡片Caption
ShowFieldCaptions:是否显示列名
ShowHorzScollBar:是否显示水平滚动条
ShowQuickCustomizeButton:是否显示Customize按钮
绑定代码
//以下代码假定ds数据集合中已经存在主从表数据
//添加主从表关系,其中关系名“Level1”跟子表的Level名要一致
//如果是单个关键字,方法如下
ds.Relations.Add("Level1", ds.Tables[0].Columns["CECODE"], ds.Tables[1].Columns["CECODE"]);
//如果是复合关键字,方法如下
DataColumn[] parentCoumns ={ ds.Tables[0].Columns["CECODE"], ds.Tables[0].Columns["CECSCD"] };
DataColumn[] childCoumns ={ ds.Tables[1].Columns["CECODE"], ds.Tables[1].Columns["CECSCD"] };
ds.Relations.Add("Level1", parentCoumns, childCoumns);
//绑定数据
DataViewManager dvManager = new DataViewManager(ds);
DataView dv = dvManager.CreateDataView(ds.Tables[0]);
xtraGrid1.DataSource = dv;
展开子表代码
int dataRowCount = gridView1.DataRowCount;
for (int rHandle = 0; rHandle < dataRowCount; rHandle++)
{
gridView1.SetMasterRowExpanded(rHandle, true);
}