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. 复杂的POI导出Excel表格(多行表头、合并单元格)

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

  2. 【转】C# DataTable 导出 Excel 进阶 多行表头、合并单元格、中文文件名乱码

    本文原创地址:http://blog.csdn.net/ranbolwb/article/details/8083983 ,转载请保留本行. 本例子是上一篇 DataTable 导出 Excel 的进 ...

  3. easyui datagrid动态设置行、列、单元格不允许编辑

    Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...

  4. ABAP ALV 颜色设置(行,列,单元格)

    BCALV_EDIT_03 http://blog.sina.com.cn/s/blog_a87b19300102who3.html 关于ALV表格颜色,这种需求在项目中会经常用到. 列颜色 列的颜色 ...

  5. ALV 颜色设置(行,列,单元格)

    [转自:https://www.cnblogs.com/mingdashu/p/color_alv.html] BCALV_EDIT_03 http://blog.sina.com.cn/s/blog ...

  6. pandas玩转excel-> (1)如何利用pandas创建【行,列,单元格】

    import pandas as pd #------新建单元格的方法一:通过先创建字典的形式 #可以先新建一个字典d={'x':100,'y':200,'z':300} #打印字典的索引print( ...

  7. 使用POI创建word表格合并单元格兼容wps

    poi创建word表格合并单元格代码如下: /** * @Description: 跨列合并 */ public void mergeCellsHorizontal(XWPFTable table, ...

  8. poi读取合并单元格

    poi读取合并单元格 学习了:http://blog.csdn.net/ycb1689/article/details/9764191 进行了列合并单元格的修正:原来是我自己找错了地方: import ...

  9. [C#]合并单元格(行、列)

    详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak説明:控件ID指的是页面上面的Grid ...

随机推荐

  1. deepdetect 用c++11写的机器学习caffe和XGBoost API 接口

    https://github.com/beniz/deepdetect DeepDetect (http://www.deepdetect.com/) is a machine learning AP ...

  2. 【Maven】Eclipse 使用Maven创建SpringMVC Web项目

    创建环境 系统:win 10 软件:eclipse,maven. 创建步骤 创建一个Maven Web项目,可以参照:[Maven]Eclipse 使用Maven创建Java Web项目 添加spri ...

  3. 【洛谷P1969】积木大赛

    递增区间内累计增量 #include<cstdio> #include<cstring> using namespace std; int a,h,n,ans; int mai ...

  4. FME规划数据GIS更新入库

    规划数据经过转换处理入库GIS,城市规划的特殊性,使得GIS里面数据经过分析处理后直接导出为CAD数据的话,肯定难以满足原来规划的要求,这个是硬伤.又要用GIS来进行空间分析处理统计,数据管理就必须了 ...

  5. (转) Active Record

    ActiveRecord是什么:1. 每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field;2. ActiveRecord同时负责把 ...

  6. Android的构造器

    当Java代码创建一个View实例,或根据XML布局文件加载并构建界面时将需要调用该构造器1.onFinishInflate():这是一个回调方法,当应用从XML布局文件加载该组件并利用它来构建界面之 ...

  7. getUserMedia

    index.ejs getUserMedia()方法有三个参数: 1.约束对象 2.成功回调函数,传入参数:LocalMediaStream 3.失败回调函数,传入参数:error object &l ...

  8. ASP.NET Core 源码阅读笔记(2) ---Microsoft.Extensions.DependencyInjection生命周期管理

    在上一篇文章中我们主要分析了ASP.NET Core默认依赖注入容器的存储和解析,这一篇文章主要补充一下上一篇文章忽略的一些细节:有关服务回收的问题,即服务的生命周期问题.有关源码可以去GitHub上 ...

  9. Hash哈希(一)

    Hash哈希(一) 哈希是大家比较常见一个词语,在编程中也经常用到,但是大多数人都是知其然而不知其所以然,再加上这几天想写一个一致性哈希算法,突然想想对哈希也不是很清楚,所以,抽点时间总结下Hash知 ...

  10. [安卓] 4、CheckBox、RadioButton和Toast简单用法

      和按钮类似,这里采用cb1.setOnCheckedChangeListener(this);方法分别对3个CheckBox进行CheckChange事件绑定,然后在onCheckedChange ...