DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
DevExpress WinForms网格控件可以垂直合并单元格,从而为具有许多重复值的视图提供更清晰的数据表示。在本教程中,您将学习如何为整个视图或单个列启用单元格合并功能,还将看到如何更改确定是否合并两个相邻单元格的算法。
获取DevExpress WinForms v24.2正式版下载
DevExpress技术交流群11:749942875 欢迎一起进群讨论
起点
从一个以常规格式显示数据的网格控件开始。

启用单元格合并
在设计时,访问视图的属性,然后展开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; } }
现在运行应用程序,查看是否正在根据域信息合并单元格。

更多产品资讯及授权,欢迎“立即咨询”!
更多DevExpress线上公开课、中文教程资讯请上中文网获取
慧都科技为国内众多知名企业提供一站式的DevExpress产品中文服务,负责DevExpress控件产品中国区的销售、试用、技术支持,赋能航空航天、金融、医疗等行业客户成功构建企业级应用!欢迎咨询:023-68661681,慧都科技助力企业迈向新高度!
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/5032.html
相关产品: DevExpress WinForms Subscription, DevExpress Universal Subscription,