DevExpress控件使用交流,DevExpress中国社区Dev联系电话 联系电话:023-68661681

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

来源:   发布时间:2025-02-10   浏览:201次

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

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

获取DevExpress WinForms v24.2正式版下载

DevExpress技术交流群11:749942875      欢迎一起进群讨论

起点

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

DevExpress WinForms中文教程图集
启用单元格合并

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

DevExpress WinForms中文教程图集

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

C#

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

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

DevExpress WinForms中文教程图集

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

DevExpress WinForms中文教程图集
禁用单个列的单元格合并

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

DevExpress WinForms中文教程图集

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

DevExpress WinForms中文教程图集
实现自定义单元格合并算法

现在您可以注意到,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;
}
}

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

DevExpress WinForms中文教程图集

为了解决这个问题,编写一个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 WinForms中文教程图集

更多产品资讯及授权,欢迎“立即咨询”!


更多DevExpress线上公开课、中文教程资讯请上中文网获取

慧都科技为国内众多知名企业提供一站式的DevExpress产品中文服务,负责DevExpress控件产品中国区的销售、试用、技术支持,赋能航空航天、金融、医疗等行业客户成功构建企业级应用!欢迎咨询:023-68661681,慧都科技助力企业迈向新高度!

本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/5032.html

相关产品: DevExpress WinForms Subscription, DevExpress Universal Subscription,

扫码咨询
电话咨询
023-68661681
返回
顶部