天天看點

使用Devexpress 的gridControl 顯示DataTable的Master-Detail關系

  綁定Master-Detail 關系 資料也是資料顯示的一種方式,此執行個體使用背景代碼建立資料源并綁定到gridcontrol。 

  其實方式參見:點選打開連結

  1.   先看效果圖(預設方式)
    使用Devexpress 的gridControl 顯示DataTable的Master-Detail關系
    直接給出背景代碼,主要使用的是dataset建立關系。
    private void simpleButton1_Click(object sender, EventArgs e)
            {
                // 定義主表
                DataTable masterTable = new DataTable("MasterTable");
                DataColumn parentColumn = new DataColumn("masterId", typeof(int));
                masterTable.Columns.Add(parentColumn);
                masterTable.Columns.AddRange(new DataColumn[]{
                 new DataColumn("name",typeof(string)),
                });
                masterTable.Rows.Add(1, "class1");
                masterTable.Rows.Add(2, "class2");
                masterTable.Rows.Add(3, "class3");
    
                // 定義子表
                DataTable detailTable = new DataTable("DetailTable");
                DataColumn childrenColumn = new DataColumn("masterId", typeof(int));
                detailTable.Columns.Add(childrenColumn);
    
                detailTable.Columns.AddRange(new DataColumn[] {
                 new DataColumn("id",typeof(int)),
                 new DataColumn("name",typeof(string)),
                 new DataColumn("age",typeof(string))
                });
    
                detailTable.Rows.Add(1, 1, "student1", "age1");
                detailTable.Rows.Add(2, 2, "student2", "age2");
                detailTable.Rows.Add(2, 3, "student3", "age3");
                detailTable.Rows.Add(2, 4, "student4", "age4");
                detailTable.Rows.Add(3, 5, "student5", "age5");
                detailTable.Rows.Add(3, 6, "student6", "age6");
                detailTable.Rows.Add(3, 7, "student7", "age7");
                detailTable.Rows.Add(3, 8, "student8", "age8");
    
    
                using (DataSet ds = new DataSet())
                {
                    ds.Tables.AddRange(new DataTable[] { masterTable.Copy(), detailTable.Copy() });
                    // 建立表關系
                    DataRelation relation = new DataRelation("detailTable", ds.Tables[0].Columns[0], ds.Tables[1].Columns[0], false);
                    ds.Relations.Add(relation); // 添加
                    gridControl1.DataSource = ds.Tables[0];  // 指定資料源
                }
            }
               
  2. 指定FileName: 設定gridview的Columns的各個列的FileName為dt的ColumnName也可以,這樣就可以自定義GridColumn的Caption屬性了。
  3. 使用子gridView顯示字表資料:以上建立的gridControl值包含一個預設的gridView,也就是mainView。預設情況下,gridcontrol會根據mastertable的relation 來自動建立并顯示detail的資料結構,那麼如果想在detail中做些操作,比如 rowupdate結束是自動計算某個值。那就用到了Level Designer(參見:點選打開連結),其名稱與 我們建立dt之間的relation時所用到的name必須一緻,如上的“detailTable"。建立一個新的gridview2,自定義列,并設定fileName,出現的效果與 1 一緻。在gridview2的RowUpdated事件中可以做任何的計算操作。例如,
    DataRowView view = e.Row as DataRowView;
     view[3] = Convert.ToInt32(view[0]) + Convert.ToInt32(view[1]);
               
    此更新會更新至dt,最終反映到gridview2上。

繼續閱讀