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

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

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

从图中可以看到,二级指标有两列,有的行中两列的内容一样,有的则不一样,如果实现如右图所示,看起来效果会更好一些。下面就着手实现这个功能,我的实现原理很简单,就是遍历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

GRIDVIEW多行多列合并单元格(合并列)相关推荐

  1. Python让Excel飞起来—批量处理行、列和单元格

    目录 案例01 精确调整多个工作簿的行高和列宽 举一反三 精确调整一个工作簿中所有工作表的行高和列宽 案例02 批量更改多个工作簿的数据格式 举一反三 批量更改多个工作簿的外观格式 案例03 批量替换 ...

  2. csstable跨列居中_html中table表格如何跨行或跨列合并单元格

    在html中的table表格实现跨行或跨列合并单元格,需要用到以下两个属性: 1.跨列colspan属性:就是合并左右关系的单元格: 2.跨行rowspan属性:就是合并上下关系的单元格: 而在tab ...

  3. SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格、合并单元格)

    本编文章继SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格)文章之后 介绍Poi-tl导出word的延伸功能: 所需依赖以及word模板所属位置 见 SpringBoo ...

  4. 复杂的POI导出Excel表格(多行表头、合并单元格)

    poi导出excel有两种方式: 第一种:从无到有的创建整个excel,通过HSSFWorkbook,HSSFSheet HSSFCell, 等对象一步一步的创建出工作簿,sheet,和单元格,并添加 ...

  5. 选择邻近区域时: 代码操作与实际EXCEL键盘操作的区别 Currentregion与CTRL+A的区别, 又存在于,比如第一行有数据(合并单元格), 第二行为空, 第三行往下有数据, 第一行选中其中

    选择邻近区域时: 代码操作与实际EXCEL键盘操作的区别 Currentregion与CTRL+A的区别, 又存在于,比如第一行有数据(合并单元格), 第二行为空, 第三行往下有数据, 第一行选中其中 ...

  6. 使用Python批量处理行、列和单元格

    使用Python批量处理行.列和单元格 精确调整工作表的行高和列宽 批量更改多个工作簿的数据格式 批量更改工作簿的外观格式 设置字体格式 修改字体为宋体 修改字号 字体加粗 字体颜色 单元格填充颜色 ...

  7. asp.net gridview删除 获取到第一行第一列的单元格内容_VBA中的常用单元格引用方式...

    VBA编程经常和"对象"打交道,其中最频繁的对象大概就是"单元格"了.(听说您还没有对象?那--我想你大概需要一份Excel,包邮988--) 今天我们就来聊一 ...

  8. layui合并表格的单元格 合并列或行的两种方法

    注意:两种方法要求layui表格的单元格中没有使用fixed属性,不然代码不会起效 方法一: /** * 合并单元格(列) * @param res 表格数据 * @param curr 当前页 * ...

  9. PHP excel导出(自定义样式,行高,合并单元格等)

    PHP 导出多个sheet 或者导出带样式的excel 修改样式方式见下文 具体使用需要根据具体业务进行一些调整和封装 $PHPExcel = new \PHPExcel(); $sheetIndex ...

最新文章

  1. Make Them Equal 埃氏筛法(1200)
  2. 空间三维散点数据的线性拟合
  3. 39页作业(还款年限—月还款额表)
  4. 为SAP Analytics Cloud的story创建持久化页面
  5. rxjs的一个例子:什么是rxjs的OperatorFunction?
  6. String/Stringbuilder/StringBuffer
  7. Java里面Unreachable code
  8. axios post封装对象到后端_axios 使用post方式传递参数,后端接受不到
  9. 台达编码器型号含义_光电编码器型号含义_光电编码器应用实例
  10. uni-app android白屏,uniapp页面跳转出现白屏怎么办
  11. 数据中心运维管理经验39条
  12. 小米卸载动画-图标爆炸实现
  13. w10系统 怎么快捷搜索服务器,w10系统怎么远程连接服务器
  14. 3D打印是什么?如何工作的?
  15. 做sxy官网的一点经验
  16. matlab括号不对称,关于matlab的Error: Unbalanced or misused parentheses or brackets.什么意思?...
  17. Spring + JedisCluster操作Redis(集群)
  18. 拼图android系统程序,2021手机照片拼图软件
  19. AVR单片机-nRF24L01发送接收程序
  20. 如何实现VMware下Ubuntu和Windows之间的复制粘贴?

热门文章

  1. Spring框架jar包分类(转)
  2. [Leetcode]141. Linked List Cycle
  3. 学习进度(2016.5.1)
  4. 计蒜客---函数规律
  5. Struts2(十二)使用验证框架验证数据较验
  6. MSSQL游标的原理及示例
  7. 高级JAVA - 高并发下接口限流 Semaphore
  8. 如何删除pdf中计算机属性,PDF文件做好后怎么修改
  9. 【题解】牛客小白月赛16(部分题,待补充……)
  10. 远程连接:hive 报错:Permission denied: user=anonymous, access=EXECUTE