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; //合并单元格的操作是否已经处理过,不再需要进行省缺处理
}
}