1. 程式人生 > >c# dev GridControl 按條件合併單元格

c# dev GridControl 按條件合併單元格

1.未合併之前的效果圖:

說明:GridControl 控制元件預設是不自動合併的,AllowCellMerge屬性預設設定為false;

2.現在,要把所有相同的列都自動合併起來:

 gridView1.OptionsView.AllowCellMerge = true;

合併之後的效果圖:

說明:設定GridControl控制元件的AllowCellMerge的屬性為true之後,會把表格中所有相同的列都自動合併在一起。但是,如果只是要合併分數那一列,其他列不合並在一起,那麼單純的設定AllowCellMerge 為true是無法實現的。

3.按照條件來合併需要合併的單元格,其他不需要的則不合並:

例如:按照分數相同的來合併單元格,分數不同的不用合併單元格。

效果如圖:

說明:要實現這種按照自定義條件合併單元格,只是單純的設定AllowCellMerge屬性為true是無法實現的,要重新設定

GridControl 控制元件的CellMerge監聽事情,在CellMerge事件中設定合併的條件篩選事件。

程式碼如下:

//自定義合併單元格的監聽方法

  void gridView1_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e)         {

           int rowHandle1 = e.RowHandle1;            int rowHandle2 = e.RowHandle2;            string strValue1 = gridView1.GetDataRow(rowHandle1)["grade"].ToString(); //獲取分數列值            string strValue2 = gridView1.GetDataRow(rowHandle2)["grade"].ToString();            if (strValue1 != strValue2)             {                 e.Merge = false; //值相同的2個單元格是否要合併在一起                 e.Handled = true; //合併單元格是否已經處理過,無需再次進行省缺處理             }

        }

4.根據條件,只合並其中的一個單元格,其他單元格都不用合併:

例如:根據分數相同來合併年齡那一列,其他列一律不合並,效果如圖:

說明:小花、小麗、張三這3人的分數都是400,但是隻合併年齡這一列,不會合並性別和分數這一列。

程式碼如下:

    //自定義合併單元格監聽事件

    void gridView1_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e)         {                       int rowHandle1 = e.RowHandle1;            int rowHandle2 = e.RowHandle2;            string strValue1 = gridView1.GetDataRow(rowHandle1)["grade"].ToString(); //獲取分數列值            string strValue2 = gridView1.GetDataRow(rowHandle2)["grade"].ToString();            if (strValue1 != strValue2)             {                 e.Merge = false; //值相同的2個單元格是否要合併在一起                 e.Handled = true; //合併單元格是否已經處理過,無需再次進行省缺處理             }

           if (e.Column.FieldName != "age") //只對分數這一列進行合併,其他列一律不合並            {                e.Merge = false; //值相同的2個單元格是否要合併在一起                e.Handled = true; //合併單元格的操作是否已經處理過,不再需要進行省缺處理            }        }