GitHub项目地址:https://github.com/chengxulvtu/merge-gridviewcell
去年的时候,我写了两篇文章: 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