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; } }现在运行应用程序查看是否正在根据域信息合并单元格。