GridControl 列合并(自定义分组条件)

2023-10-30

说明:

    当前方式不提倡,最好还是使用 (1)主从表、或(2)分组。

一、数据源

DataTable dta = new DataTable();
dta.Columns.Add("A");
dta.Columns.Add("B");
dta.Columns.Add("C");
dta.Columns.Add("D");
for (int m = 1; m <=20; m++)
  dta.Rows.Add($"A{m/5}", $"B", $"C{m/2}",$"D{m}");
grid.DataSource = dta;

二、默认合并

gv.OptionsView.AllowCellMerge = true;

三、根据条件分组合并(根据列A分组合并)

调用示例:

FuncGrid.SetMergeCell(gv, "A", new[] { "B", "C" });

四、自定类

        #region 按条件合并
        
        private static string _groupName;
        private static string[] _mergeCols;
        /// <summary>
        /// GridView合并(自定义分组)
        /// </summary>
        /// <param name="gv"></param>
        /// <param name="groupName">分组列(需要合并的列)</param>
        /// <param name="mergeCols">需要合并的列</param>
        public static void SetMergeCell(GridView gv, string groupName, string[] mergeCols)
        {
            gv.OptionsView.AllowCellMerge = true;
            _groupName = groupName;
            _mergeCols = mergeCols;
            gv.CellMerge += Gv_CellMerge;
        }

        private static void Gv_CellMerge(object sender, CellMergeEventArgs e)
        {
            try
            {
                GridView myGv = sender as GridView;
                if (myGv == null) return;
                DataRow dra1 = myGv.GetDataRow(e.RowHandle2 - 1);
                DataRow dra2 = myGv.GetDataRow(e.RowHandle2);
                if (dra1 == null || dra2 == null) return;

                foreach (string str in _mergeCols)
                {
                    if (e.Column.FieldName == str)
                    {
                        bool isOk1 = dra1[_groupName].ToString() == dra2[_groupName].ToString();
                        bool isOk2 = dra1[str].ToString() == dra2[str].ToString();
                        e.Merge = isOk1 && isOk2;
                        e.Handled = true;
                    }
                }
            }
            catch
            {
            }
        }

        #endregion

 

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

GridControl 列合并(自定义分组条件) 的相关文章

随机推荐

  • InterlockedExchange

    LONG InterlockedExchange IN OUT PLONG Target IN LONG Value InterlockedExchange a b 能以原子操作的方式交换俩个参数a b 并返回a以前的值 因为Interlo
  • 关于区块链的所有英文知识,看这篇文章就够了

    上周HiBlock区块链社区发布了一则区块链翻译小组成员招募信息 一些感兴趣的小伙伴说很多英文名词不知道怎么翻译比较准确 有砖家提出 翻译的基本原则是信达雅 即先要基于约定俗成 也就是共识 那么到底这些区块链相关的名词 共识下的中文对照是什
  • Compiling MongoDB C++ Driver, Boost Error (Windows)

    Compiling MongoDB C Driver Boost Error Windows up vote 1 down vote favorite 1 I am trying to compile the MongoDB C Drive
  • STL迭代器简介

    转自 http www cppblog com The Moment archive 2009 06 18 88023 html 标准模板库 The Standard Template Library STL 定义了五种迭代器 下面的图表画
  • 考试管理系统【软件工程实践课设报告】

    若本文对你有用 请点赞 关注我哟 软件工程专业大四上学期课设之一 随便乱写的 报告评分不高 仅供参考 一 软件工程实践课程任务目标 掌握软件工程问题调研 问题分析和原型设计 掌握从技术 经济 社会等方面对系统软件的评估 掌握运用软件工程原理
  • 一文搞懂信号

    一 信号 1 1信号特点 信号 Signal 在操作系统中是一种进程间通信机制 用于向进程发送异步通知 以下是信号的几个特点 异步通知 信号是异步发送给进程的 即进程在接收到信号时会中断当前的执行流程 转而去处理信号的处理函数 这个特点使得
  • Linux之参考资料

    底下列出几个学习网站来提供大家做为参考的依据 Study Area http www study area org 鸟哥癿私房菜馆 http linux vbird org 卧龙大师癿网绚技术文件 http linux tnc edu tw
  • QT从入门到实战x篇_21_自定义控件封装(手动新增一个.ui文件;封装自定义组合控件;调用自定义控件;创建自定义控件间的功能关联;外部控件与自定义控件交流,创建自定义控件接口函数)

    前面几篇我们介绍了Qt自带的控件 本篇将会介绍如何自定义组合控件并创建接口为其他控件所使用的 在进行实际开发中 Qt自带的控件无法满足开发需求时 就需要通过对Qt控件进行封装实现自定义控件 1 首先创建名为 01 SmallWidget 的
  • [转]__declspec(dllexport) 和 __declspec(dllimport)

    declspec dllexport declspec dllexport 将一个函数声名为导出函数 就是说这个函数要被包含她的程序之外的程序调用 extern C 指示编译器用C语言方法给函数命名 在制作DLL导出函数时由于C 存在函数重
  • VMware Workstation Pro 虚拟机做RAID

    虚拟机添加两块硬盘 安装raid管理工具mdadm yum install y mdadm 查看磁盘情况 fdisk l 创建raid1 mdadm C dev md1 n 2 l 1 a yes dev sd b c 查看raid信息 c
  • linux下的串口调试工具安装及使用

    两行命令安装串口调试助手 如下 sudo apt get install cutecom sudo cutecom
  • 基础的复位电路

    目前在系统化的学习电路知识 因此将一些值得记忆的内容记录下来 方便查阅 单片机必须要设计一个复位电路 以防指针跑飞或是出现其他状况 由于系统初始化时 也需要一个过程 此时希望程序处于复位的状态 防止单片机误发命令 因此常用上图所示电路 以下
  • Hexo+Github博客搭建教程(个人操作过程)

    Hexo Github博客搭建教程 个人操作过程 最近自己尝试利用hexo github搭建了blog 来记录一下过程 一 准备环境 1 node环境 首先 安装 nodejs 因为Hexo是基于 Node js 驱动的一款博客框架 htt
  • MATLAB中fillmissing函数用法

    目录 语法 说明 示例 包含 NaN 值的向量 由 NaN 值组成的矩阵 插入缺失数据 使用移动中位数方法 使用自定义填充方法 包含缺失端点的矩阵 包含多个数据类型的表 fillmissing函数的功能是填充缺失的条目 语法 F fillm
  • 【Educoder作业】冯·诺依曼体系结构及工作原理理解

    Educoder作业 冯 诺依曼体系结构及工作原理理解 所有的那个实际场景模拟的题就不更了 没难度 趣味性更高 这个题和我们之前的一篇博客里面的题只一模一样的 链接 我们这里就不做任何讲解了 要说的那一篇里已经说过了 几天过去 有些程序的实
  • STM32F1软件仿真

    MDK 的一个强大的功能就是提供软件仿真 通过软件仿真 我们可以发现很多将要出现 的问题 避免了下载到 STM32 里面来查这些错误 这样最大的好处是能很方便的检查程序存 在的问题 因为在 MDK 的仿真下面 你可以查看很多硬件相关的寄存器
  • 1.Kubernetes(K8S)架构1(Master,Node和Pod)

    简介 K8S是当前主流的容器编排系统 服务编排系统要想实现服务的自动化部署和运行离不开容器编排系统 容器目的是解决服务器的异构问题 解决了部署的时候无需在考虑底层系统环境是否能够满足服务的需要 但是单独的容器并没有生产的价值 因为他只是提供
  • Jupyter Notebook的使用01—三种打开方式以及修改默认打开文件夹

    首先安装Anaconda 成功后 打开开始菜单会出现下图所示 方法一 1 点击 Anaconda Prompt 2 输入jupyter notebook 方式二 直接点击 Jupyter Notebook 也可以 创建桌面快捷方式 以后就可
  • js工具类合集(utils.js)

    目录 1 验证URL格式 2 获取当前日期或时间type date 获取日期 time 获取时间 3 日期 时间选择框转换字符串 4 格式化时间 5 随机生成32位数 6 前端分页展示数据 7 判断日期是不是今天 昨天 明天 8 坐标转化
  • GridControl 列合并(自定义分组条件)

    说明 当前方式不提倡 最好还是使用 1 主从表 或 2 分组 一 数据源 DataTable dta new DataTable dta Columns Add A dta Columns Add B dta Columns Add C d