GRIDVIEW多行多列合并单元格(合并列)

2023-10-31

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GRIDVIEW多行多列合并单元格(合并列) 的相关文章

  • Keras CNN 回归模型损失低,准确度为 0

    我在 keras 中遇到这个 NN 回归模型的问题 我正在研究一个汽车数据集 以根据 13 个维度预测价格 简而言之 我已将其读取为 pandas 数据帧 将数值转换为浮点数 缩放值 然后对分类值使用 one hot 编码 这创建了很多新列
  • 使用迭代器遍历 boost::ublas 矩阵

    我只是想从头到尾遍历一个矩阵 触及每个元素 然而 我发现升压矩阵没有一个迭代器 而是有两个迭代器 而且我无法弄清楚如何使它们工作以便您可以遍历整个矩阵 typedef boost numeric ublas matrix
  • DirectX Vertex 中的 THE 是什么

    我知道 RHW 是倒数同质 W 但有人可以解释一下它的使用方法和作用吗 gamedev论坛上的说明post http www gamedev net topic 440283 reciprocal of homogeneous w and
  • SolrNet:尝试添加和提交时 SolrConnectionException (400) 错误请求

    我已经到了 SolrNet 执行 Add 方法的地步 但是当我尝试 Commit 时 我收到了错误 以下是我的 schema xml 模型 调用它的代码以及我得到的错误 更奇怪的是 尽管出现错误 但在我重新启动 Tomcat 后 该模型仍会
  • 在 C99 中,f()+g() 是未定义还是只是未指定?

    我曾经认为在C99中 即使函数的副作用f and g干扰 虽然表达f g 不包含序列点 f and g将包含一些 因此行为将是未指定的 要么 f 在 g 之前调用 要么 g 在 f 之前调用 我不再那么确定了 如果编译器内联函数会怎样 即使
  • Python 正则表达式中的 \B+ 与 [\B]+ 与 [^\b]+

    我在回答 SO 问题时遇到了一个我不明白的问题 我创建了一个简化的示例来说明该问题 场景 我正在测试两个标记 不是随机的英语单词 在字符串中至少相距一定距离 在这个例子中 我们有一个动物列表 我们要确保在羊和狼之间至少还有其他三种动物 否则
  • 找到两个值的平均值的正确方法是什么?

    我最近了解到整数溢出是 C 中的未定义行为 附带问题 C 中也是 UB 吗 在 C 编程中 您通常需要求两个值的平均值a and b 然而做 a b 2可能会导致溢出和未定义的行为 所以我的问题是 找到两个值的平均值的正确方法是什么a an
  • Mxnet - 缓慢的数组复制到 GPU

    我的问题 我应该如何在 mxnet 中执行快速矩阵乘法 我的具体问题 数组复制到 GPU 的速度很慢 对此我们能做些什么呢 我创建随机数组 将它们复制到上下文中 然后相乘 import mxnet as mx import mxnet nd
  • if(pointerVar) 与 if(pointerVar!=NULL) 相同吗?

    简单的问题 Is if pointerVar 与if pointerVar NULL 也是if pointerVar 与if pointerVar NULL 给我你在技术上最正确 迂腐的答案 这两种说法看起来和操作起来都是一样的 前者有什么
  • 如何将日期格式从 DD/MM/YYYY 或 MM/DD/YYYY 更改为 YYYY-MM-DD?

    我需要使用 C 更改日期字符串的格式 来自 06 16 2010 或 16 06 2010 至 2010 06 16 你能帮我实现这个目标吗 thanks 如果您已经将其作为DateTime use string x dt ToString
  • 将 LPTSTR 转换为要写入文件的字符串或 char *

    我想将 LPTSTR 转换为字符串或 char 以便能够使用 ofstream 将其写入文件 有任何想法吗 Use T2A http msdn microsoft com en us library 87zae4a3 VS 80 aspx宏
  • 如何在 Windows 10 上将 ipynb 文件与 Jupyter Lab(来自 Anaconda)关联

    我使用 Windows 10 Jupiter Lab 是从 Anaconda 安装的 我想交往ipynb使用 Jupyter Lab 保存文件 这样 当我双击ipynb文件应使用 Jupyter Lab 打开 我该怎么做 Install n
  • 如果未先将 lambda 表达式强制转换为委托或表达式树类型,则无法将其用作动态分派操作的参数

    我正在使用 NET4 5 和 VS2013 我有这个查询dynamic来自数据库的结果 dynamic topAgents this dataContext Sql select t create user id as User sum t
  • 在 envoy 中使用 rm *(通配符):没有这样的文件或目录

    我正在使用 Python 和 Envoy 我需要删除目录中的所有文件 除了一些文件外 该目录是空的 在终端中 这将是 rm tmp my silly directory 常识表明 在特使中 这转化为 r envoy run rm tmp m
  • 我的 Visual Studio 2008 模板有什么问题?

    我正在尝试为 Visual Studio 创建自己的类模板 称为 公共类 我跟着有关如何手动创建项目模板的官方 MSDN 说明 http msdn microsoft com en us library ms247113 aspx几乎一字不
  • 如何在 C# 中使用 Selenium WebDriver 获取当前窗口的 URL?

    在我的应用程序中 登录时 它会导航到另一个页面 现在我需要在 selenium C 中使用 WebDriver 获取新的 URL 我找不到任何函数来执行此操作 我努力了driver Url driver getLocation and dr
  • 复杂对象上的 GroupBy(例如 List

    Using GroupBy and Count gt 1我试图在列表中查找我的类的重复实例 该类看起来像这样 public class SampleObject public string Id public IEnumerable
  • 同时使用多个控制台

    是否有捷径可寻 我现在仅使用控制台测试我的网络应用程序 最好的办法是从一个项目中拥有多个控制台 然后按一下 立即调试 菜单项 我可以像过去一样使用多个项目 但这似乎很笨拙 理想情况下 我可以启动多个控制台实例 从同一线程运行很好 并且让它们
  • printf 右对齐括号内的数字

    我正在编写一个程序 显示数组中的所有信息 它必须以括号中的数组索引开头 例如 2 并且它们必须彼此正确对齐 如果只是数字 我知道你可以这样做 printf 10d index 但是用括号括起来会得到以下输出 1 2 10 11 当我真正希望
  • 如何将 pygame Surface 转换为 PIL 图像?

    我正在使用 PIL 来透视地变换屏幕的一部分 原始图像数据是一个 pygame Surface 需要转换为 PIL 图像 因此我发现了 pygame 的 tostring 函数就是为了这个目的而存在的 然而结果看起来很奇怪 见附图 这段代码

随机推荐

  • 整数除法JS

    param number a param number b return number var divide function a b const MIN Math pow 2 31 const MAX Math pow 2 31 1 判断
  • Redis的事务学习及用Redis实现乐观锁,redis数据类型总结

    一 Redis的事务操作 1 Redis 事务可以一次执行多个命令 并且带有以下三个重要的保证 批量操作在发送 EXEC 命令前被放入队列缓存 收到 EXEC 命令后进入事务执行 事务中任意命令执行失败 其余的命令 依然被执行 但是如果队列
  • C语言基础知识--变量

    目录 一 C语言变量 1 局部变量 1 什么是局部变量 2 代码示例 3 代码讲解 2 全局变量 1 什么是全局变量 2 代码示例 3 代码讲解 3 静态变量 1 全局静态变量 2 局部静态变量 3 代码示例 4 代码讲解 4 const常
  • 用Python制作一个自动抢票脚本

    前言 大麦网 是中国综合类现场娱乐票务营销平台 业务覆盖演唱会 话剧 音乐剧 体育赛事等领域 但是因为票数有限 还有黄牛们不能丢了饭碗 所以导致了 很多人都抢不到票 那么 今天带大家用Python来制作一个自动抢票的脚本小程序 知识点 面向
  • 死锁产生的条件及其如何处理

    一 原因与条件 产生死锁的原因主要是 因为系统资源不足 进程运行推进的顺序不合适 资源分配不当等 发生死锁的四个必要条件 相互排斥 所涉及的资源必须不可共享 否则 将不会阻止进程在必要时使用资源 保留并等待或部分分配 进程在等待其他 请求的
  • Quartus II 操作入门

    使用Quartus设计FPGA 简单包括以下流程 新建工程 写代码 编译工程 找错误 分配引脚 重编译 下载配置 到硬件 为保证设计的正确性 在编译后 一般还需要做仿真验证 然后下载至硬件 有两种仿真方式 功能仿真 时序仿真 新建工程 写代
  • (数学)GCD总结

    目录 简介 算法实现 代码 应用 简介 GCD即Greatest Common Divisor 例如 12和30的公约数有 1 2 3 6 其中6就是12和30的最大公约数 两个整数的最大公约数主要有两种寻找方法 两数各分解质因子 然后取出
  • Python + Selenium 练习篇 - 获取页面所有邮箱

    代码如下 coding utf 8import re python中利用正则 需要导入re模块from selenium import webdriverdriver webdriver Chrome driver maximize win
  • [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息 两种方法从本质上都是一样的 都是通过分析网页的DOM树结构进行元素定位 再定向爬取具体的电影信息 通过代码的对比 你可以进一步加深Python爬虫的印
  • Spring boot 注册过滤器的方式

    方式一 import jakarta servlet import jakarta servlet annotation WebFilter import java io IOException WebFilter public class
  • mysql 多线程查询全部数据_python使用多线程查询数据库的实现示例

    一 背景 当数据量过大时 一个程序的执行时间就会主要花费在等待单次查询返回结果 在这个过程中cpu无疑是处于等待io的空闲状态的 这样既浪费了cpu资源 又花费了大量时间 当然这里主要说多线程 批量查询不在考虑范围 总会存在不能批量查询的情
  • 使用Windows的cmd命令打包java项目为jar文件

    在操作前请确保你的电脑已配置java环境 即在环境变量中添加jdk的bin的路径 首先运行java文件检查源码是否有误 生成 class后在当前目录下打开cmd窗口 输入jar help检查环境是否配置好 如出现 无法将 jar help
  • 为什么使用$.ajax()中的data传参到后台取值为null

    注意 在调试时可以使用FF浏览器 因为他可以在调试时查看到请求中的内容和详情 场景如下 ajax url business RuleDef getKylinChartData 请求地址 type POST 请求类型 cache false
  • deepfake-faceswap第一篇论文-2016摘要

    核心目标 给定一个人的单张图片A 另一个人的单张图片B 在保持姿势 面部表情 视线方向 发型和光照不变的条件下 将A图片中的人物换成B图片中的人物 2016年 文章 1 实现了这个目标 德国的蒂宾根大学L A Gatys小组实现了对图片艺术
  • 2023华为od机试B卷【计算误码率】

    题目描述 误码率是最常用的数据通信传输质量指标 它可以理解为 在多少位数据中出现一位差错 移动通信 网络中的误码率主要是指比特误码率 其计算公式如下 比特误码率 错误比特数 传输总比特数 为了简单 我们使用字符串来标识通信的信息 一个字符错
  • 计算机组成原理大题简答题,常见问题总结(必背)

    计算机中采用二进制主要原因 技术实现简单 计算机由逻辑电路组成 逻辑电路通常只有两个状态 开关的接通与断开 这两种状态正好可以用 1 和 0 表示 简化运算规则 两个二进制数和 积运算组合各有三种 运算规则简单 有利于简化计算机内部结果 提
  • 环球新材国际:新业务增长点不断凸显 未来业绩增长稳定可期

    11月13日 环球新材国际 6616 HK 发布自愿性公告 披露了业务发展最新情况 从公告内容不难发现 未来公司有几大强力增长点 首先 在新能源电池业务方面年内已实现重大突破 尤其是在中期业绩报告中已有初具规模的收入体现 且具有十分乐观的未
  • base64编码上传图片java后台接收实例

    思路 前台传以data image jpeg base64 开头的base64编码的String字符串 后台接收字符串以后先进行base64解码 decodeBuffer 转换成二进制编码 然后使用字节输出流FileOutputStream
  • 杂记——记录一次参加华为OD研发岗位的面试过程

    流程 一 在线机试 二 性格测试 三 技术一面 四 技术二面 五 技术三面 六 资格面试 七 综合面试 关于od 自己去论坛上面看吧 褒贬不一 自个儿衡量 一 在线机试 1 在 牛客网 上完成三道题目 多是字符串和排列相关的题目 总分在15
  • GRIDVIEW多行多列合并单元格(合并列)

    GitHub项目地址 https github com mingceng merge gridviewcell 去年的时候 我写了两篇文章 GridView多行多列合并单元格 完整代码和例子 和 GridView多行多列合并单元格 指定列合