GitHub项目地址:https://github.com/chengxulvtu/merge-gridviewcell

去年的时候,我写了两篇文章:  GridView多行多列合并单元格(完整代码和例子)和 GridView多行多列合并单元格(指定列合并)。今天继续再添加一些功能,首先看下图:

GridView多行多列合并单元格(合并列)-程序旅途

左边是原始数据的显示,右边是应用合并列之后的效果。

从图中可以看到,二级指标有两列,有的行中两列的内容一样,有的则不一样,如果实现如右图所示,看起来效果会更好一些。下面就着手实现这个功能,我的实现原理很简单,就是遍历GridView的行和遍历行中的单元格,如果单元格的前一列和当前列的内容相同就合并这两列。下面是具体实现的代码,上面有注释,应该很容易理解。

        /// <summary>
        /// 和并列
        /// </summary>
        /// <param name="gv">要合并的GridView</param>
        /// <param name="startCol">开始列的索引</param>
        /// <param name="endCol">结束列的索引</param>
        /// <param name="containHeader">是否合并表头,默认不合并</param>
        public static void MergeColumn(GridView gv, int startCol, int endCol, bool containHeader = false)
        {
            if (containHeader)
            {
                BLRowCells(gv.HeaderRow, startCol, endCol);
            }
            foreach (GridViewRow row in gv.Rows)
            {
                BLRowCells(row, startCol, endCol);
            }
        }

        /// <summary>
        /// 遍历GridViewRow中的单元格
        /// </summary>
        /// <param name="row">要遍历的行</param>
        /// <param name="start">开始索引</param>
        /// <param name="end">结束索引</param>
        private static void BLRowCells(GridViewRow row, int start, int end)
        {
            //从开始索引的下一列开始
            for (int i = start + 1; i <= end; i++)
            {
                //当前单元格
                TableCell currCell = row.Cells[i];
                //前一个单元格
                TableCell prevCell = row.Cells[i - 1];
                if (!string.IsNullOrEmpty(currCell.Text) && !string.IsNullOrEmpty(prevCell.Text))
                {
                    if (currCell.Text == prevCell.Text)
                    {
                        currCell.ColumnSpan = prevCell.ColumnSpan < 1 ? 2 : prevCell.ColumnSpan + 1;
                        prevCell.Visible = false;
                    }
                }
            }
        }

调用代码如下所示:

TNM.MergeGridViewCell.MergeColumn(gvAfter, 1, 2, true);

本篇文章作为前两篇文章的续文,内容相对来说简单一些,不过有需要合并GridView单元格的朋友,希望这三篇文章能够起到帮助作用!

GitHub项目地址:https://github.com/chengxulvtu/merge-gridviewcell