层次关系的数据展示,即我们常说的数据展示分析。举个例子,好比有A,B,C三个教师,每个教师带几个学生,假设A教师带S1,S2,S3三个学生,B教师带S4,S5,S6三个学生,C教师带S7,S8,S9三个学生,在一个网格中,先将三位教师的信息显示出来,然后分别点击每个教师的信息,弹出所带学生的相关信息。它属于分层展示数据的一种方式。
如下图所示,有两个部门,第一个部门里面所拥有的介质有水,电,蒸汽;第二个部门有水,电,还有催化烧焦,当点击左边的部门信息旁边的加号时,展开和该部门相关的介质信息。
第三方控件Infragistics中的UltraWinGrid中自带有这种功能,只要将DataSet中几个表的关系添加一下,就会自动显示成上面的样式。下面的这个方法中DataSet.Relations.Add()是设置表之间的关系的,它有几个重载方法。自己根据需要进行选择。
private void FillTable()
{
string strSql = "select 部门编码,部门名称 from 部门表 where 条件";
DataSet ds = GetDataSet(strSql,"dep");
strSql = "select 介质编码,介质名称,部门编码 from 介质表 where 条件";
SlnDataAccess.FillDataSet(ds, "nhxm", strSql);
//添加关系
ds.Relations.Add(ds.Tables[0].Columns[0], ds.Tables[1].Columns[2]);
//绑定
this.grdTest.DataSource = ds;
this.grdTest.DataBind();
Infragistics.Win.UltraWinGrid.UltraGridBand band = this.grdTest.DisplayLayout.Bands[0];
band.Columns[0].Header.Caption = "部门编码";
band.Columns[0].Width = 80;
band.Columns[1].Header.Caption = "部门名称";
band.Columns[1].Width = 80;
band = this.grdTest.DisplayLayout.Bands[1];
band.Columns[0].Header.Caption = "介质编码";
band.Columns[0].Width = 80;
band.Columns[1].Header.Caption = "介质名称";
band.Columns[1].Width = 80;
band.Columns[2].Hidden = true;
//加颜色进行区分
this.grdTest.DisplayLayout.Bands[0].Override.RowAppearance.BackColor = Color.LightSalmon;
this.grdTest.DisplayLayout.Bands[1].Override.RowAppearance.BackColor = Color.LightYellow;
}
只要明确各表之间的关系,然后填充到DataSet中,将DataSet做为数据源赋值给ultraGrid就可以实现上述的分级展示了。