c# dev GridControl 按条件合并单元格

1.未合并之前的效果图:

c# dev GridControl 按条件合并单元格

说明:GridControl 控件默认是不自动合并的,AllowCellMerge属性默认设置为false;

2.现在,要把所有相同的列都自动合并起来:

 gridView1.OptionsView.AllowCellMerge = true;

合并之后的效果图:

c# dev GridControl 按条件合并单元格

说明:设置GridControl控件的AllowCellMerge的属性为true之后,会把表格中所有相同的列都自动合并在一起。但是,如果只是要合并分数那一列,其他列不合并在一起,那么单纯的设置AllowCellMerge 为true是无法实现的。

3.按照条件来合并需要合并的单元格,其他不需要的则不合并:

例如:按照分数相同的来合并单元格,分数不同的不用合并单元格。

效果如图:

c# dev GridControl 按条件合并单元格

说明:要实现这种按照自定义条件合并单元格,只是单纯的设置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.根据条件,只合并其中的一个单元格,其他单元格都不用合并:

例如:根据分数相同来合并年龄那一列,其他列一律不合并,效果如图:

c# dev GridControl 按条件合并单元格

说明:小花、小丽、张三这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; //合并单元格的操作是否已经处理过,不再需要进行省缺处理
           }
       }