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; //合併單元格的操作是否已經處理過,不再需要進行省缺處理 } }