当前位置: 首页 > news >正文

DevExpress WinForms中文教程:Grid View - 如何实现单元格合并?

DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

DevExpress WinForms网格控件可以垂直合并单元格,从而为具有许多重复值的视图提供更清晰的数据表示。在本教程中,您将学习如何为整个视图或单个列启用单元格合并功能,还将看到如何更改确定是否合并两个相邻单元格的算法。

DevExpress新旧版本帮助文档获取可点击这篇文章查看——>《界面控件DevExpress v26.1帮助文档大全(CHM版本)》

起点

从一个以常规格式显示数据的网格控件开始。

启用单元格合并

在设计时,访问视图的属性,然后展开GridView.OptionsView并启用GridOptionsView.AllowCellMerge选项。

由于网格没有为单元格合并提供默认UI,因此可以创建一个按钮处理程序,在运行时切换相同的选项。

C#

private barButtonItem1_ItemClick(object sender, ItemClickEventArgs e) { gridView1.OptionsView.AllowCellMerge = !gridView1.OptionsView.AllowCellMerge; }

运行应用程序,注意具有相同值的列单元格被合并,单击该按钮可查看启用或禁用单元格合并时布局的变化情况。

请注意,可以通过对具有重复值的列进行排序来启用更具可读性的视图。这将相同的值放在一起,因此视图将更大的数据块连接到合并的单元格中。

禁用单个列的单元格合并

现在选择Priority列来访问它的属性,展开GridColumn.OptionsColumn,然后禁用OptionsColumn.AllowMerge选项。

运行应用程序,查看优先级单元格不再合并,而其他列仍然启用了该特性。

实现自定义单元格合并算法

现在您可以注意到,Created By列中的电子邮件地址具有重复的域。您可以更改单元格合并算法,以便将具有相同域的所有单元格合并在一起。

选择网格视图并访问其事件来编写ColumnView.CustomColumnDisplayText处理程序,代码检查是否正在处理Created By列。单元格显示文本(或电子邮件地址)从CustomColumnDisplayTextEventArgs.DisplayText参数获得,处理程序然后检索带有域名的子字符串,并将其分配回CustomColumnDisplayTextEventArgs.DisplayText。

C#

private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) { if (e.Column == colCreatorID) { string email = e.DisplayText; string domain = email.Substring(email.IndexOf('@') + 1); e.DisplayText = domain; } }

运行应用程序,您将看到域名显示在单元格中,但没有发生合并,因为该特性仍然依赖于单元格值而不是显示文本。

为了解决这个问题,编写一个GridView.CellMerge事件处理程序。首先,检查正在处理的列是否正确。然后,获取正在比较的两个单元格的显示文本。最后,指示如果单元格的显示文本匹配,则合并单元格。将CellMergeEventArgs.Handled参数设置为true,以覆盖网格对该列的默认处理。

C#

using DevExpress.XtraGrid.Views.Grid; // ... private void gridView1_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e) { GridView view = sender as GridView; if(view == null) return; if (e.Column == colCreatorID) { string text1 = view.GetRowCellDisplayText(e.RowHandle1, colCreatorID); string text2 = view.GetRowCellDisplayText(e.RowHandle2, colCreatorID); e.Merge = (text1 == text2); e.Handled = true; } }

现在运行应用程序,查看是否正在根据域信息合并单元格。

http://www.gsyq.cn/news/1632714.html

相关文章:

  • Redis 五大数据结构及使用场景
  • 计算机毕业设计之基于YOLOv8的车辆检测与识别系统
  • PAT 乙级题目讲解:1005 《继续(3n+1)猜想》
  • delphi12 sqlserver 客户-服务简单连接设置
  • MySQL 8 设置允许远程连接(Windows环境)
  • Agent Skills架构深度解析:渐进式上下文加载的3层策略
  • CANN/GE LLM-DataDist CacheDesc API文档
  • UniApp相关知识点整理
  • 10分钟掌握Touch WX单文件开发模式,告别传统四文件烦恼
  • PyTorch神经网络基础与实战:从FNN到RNN
  • SteamShutdown终极指南:让电脑在Steam下载完成后自动关闭
  • CANN PID控制性能指标
  • nwpu-cram之机器人编程:ROS基础与应用
  • MEGA_F 00000-2006-000-06 直线驱动器模块
  • Kronos股票预测AI:三分钟搭建你的智能投资大脑,准确率突破85%的终极方案
  • YOLOv8工业落地全流程:从网络解析到多平台部署实战
  • 新能源汽车热管理系统核心零部件及工作原理详解
  • PyMiniRacer异常处理全攻略:解析错误类型与调试技巧
  • 炉石传说加速器:用HsMod提升游戏效率300%的终极指南
  • Kimi Chat vs GPT-4o中文编程实测:从LeetCode到Django开发
  • BK7259 WiFi6音视频SoC:智能家居视频流处理技术解析
  • RTL8761BTV蓝牙双模芯片特性与应用解析
  • Gloom的Compose UI组件库:可复用UI组件开发实战
  • Gemini四款主力模型选型指南:从物理约束到工程落地
  • 如何快速上手LIII:零基础也能玩转的多平台BT下载工具
  • OpenClaw机械臂抓取系统:核心技术解析与应用实践
  • 昇腾/GE LLM数据分发分配缓存块API
  • Video2X终极指南:免费AI视频放大与帧率提升神器
  • eldarion-ajax与Bootstrap集成:构建响应式AJAX界面的完整教程
  • DeepSeek与豆包中文实测:办公学习场景下的AI应用选择指南