zoukankan      html  css  js  c++  java
  • GRIDVIEW多行多列合并单元格(合并列)

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

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

    gridview-merge-cell-01

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

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

       1:          /// <summary>
       2:          /// 和并列
       3:          /// </summary>
       4:          /// <param name="gv">要合并的GridView</param>
       5:          /// <param name="startCol">开始列的索引</param>
       6:          /// <param name="endCol">结束列的索引</param>
       7:          /// <param name="containHeader">是否合并表头,默认不合并</param>
       8:          public static void MergeColumn(GridView gv, int startCol, int endCol, bool containHeader = false)
       9:          {
      10:              if (containHeader)
      11:              {
      12:                  BLRowCells(gv.HeaderRow, startCol, endCol);
      13:              }
      14:              foreach (GridViewRow row in gv.Rows)
      15:              {
      16:                  BLRowCells(row, startCol, endCol);
      17:              }
      18:          }
      19:   
      20:          /// <summary>
      21:          /// 遍历GridViewRow中的单元格
      22:          /// </summary>
      23:          /// <param name="row">要遍历的行</param>
      24:          /// <param name="start">开始索引</param>
      25:          /// <param name="end">结束索引</param>
      26:          private static void BLRowCells(GridViewRow row, int start, int end)
      27:          {
      28:              //从开始索引的下一列开始
      29:              for (int i = start + 1; i <= end; i++)
      30:              {
      31:                  //当前单元格
      32:                  TableCell currCell = row.Cells[i];
      33:                  //前一个单元格
      34:                  TableCell prevCell = row.Cells[i - 1];
      35:                  if (!string.IsNullOrEmpty(currCell.Text) && !string.IsNullOrEmpty(prevCell.Text))
      36:                  {
      37:                      if (currCell.Text == prevCell.Text)
      38:                      {
      39:                          currCell.ColumnSpan = prevCell.ColumnSpan < 1 ? 2 : prevCell.ColumnSpan + 1;
      40:                          prevCell.Visible = false;
      41:                      }
      42:                  }
      43:              }
      44:          }

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

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

  • 相关阅读:
    C#简单的工厂模式
    Microsoft.XMLHttp的属性和方法的简介及使用
    Google Earth 2007中文修订版
    偷懒秘笈之一键生成 Ajax Control Toolkit 标记 (转)
    C#获取硬盘序列号
    Google和百度、雅虎的站内搜索代码
    Visual Studio 2005 Team Suite 180 天试用版
    几种 Dotnet ORM 库的比较
    Windows Server 2003 SP2 0918 Personal 精简版
    通用水晶报表绑定类[原]
  • 原文地址:https://www.cnblogs.com/nianming/p/3268981.html
Copyright © 2011-2022 走看看