層次關係的數據展示,即我們常說的數據展示分析。舉個例子,好比有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就可以實現上述的分級展示了。