DevExpress WinForms中文教程:Grid View - 如何实现识别行操作?(一)
DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
在本教程中,您将了解到DevExpress WinForms网格视图标识其行的方式。
- 数据源行索引
- 行处理
- 可见索引
获取DevExpress WinForms v24.2正式版下载
DevExpress技术交流群11:749942875 欢迎一起进群讨论
概述
数据源索引是指绑定列表中的记录,您将使用它们进行数据编辑。每个数据行都有一个惟一的索引,而组行只引用第一个可用的数据行,而服务行返回负值。

网格视图使用行句柄来标识任何类型的行,组行有连续的负索引,服务行有预定义值,数据行有正索引。

最后,可见索引按照在屏幕上显示的顺序枚举所有行,这些标识符主要用于实现行导航。

现在仔细看看何时使用每种类型的行标识符以及它们之间的区别。
纯数据中的行标识符
如果网格显示的是普通数据,那么这三个标识符在每行中通常是相同的,它们都是以0开头的行下标。

排序和过滤数据时行标识符之间的差异
数据排序
排序数据是查看这些标识符之间区别的一种方法,记录的顺序改变了,数据源索引也随之改变。相同的行由相同的数据源索引标识,但顺序现在不同了。另一方面,行句柄和可见索引仍然是从0开始的连续整数,并且它们在每行中相互匹配。

过滤数据
当您筛选行时,也会达到类似的效果。数据被重新加载,行结构被重新构建,可见索引和行句柄被更新以反映新的结构,而数据源索引跟随它们对应的行。

错误使用行句柄
重要的一点是,行句柄和可见索引会随着用户操作的变化而变化,创建一个简单的示例来说明这一点。DevExpress WinForms Ribbon控件中的Save Index按钮将保存当前聚焦行的句柄,为此声明一个整数savedRowHandle字段,并将网格视图的ColumnView.FocusedRowHandle属性值分配给它。
C#
int savedRowIndex; private void barButtonSaveIndex_ItemClick(object sender, ItemClickEventArgs e) { savedRowIndex = gridView1.FocusedRowHandle; }
还有一个Change Value按钮,它的Click事件处理程序使用ColumnView.SetRowCellValue方法将Name列单元格设置为保存行中的空字符串。
C#
private void barButtonChangeValue_ItemClick(object sender, ItemClickEventArgs e) { gridView1.SetRowCellValue(savedRowIndex, colName, string.Empty); }
运行应用程序并首先使用Audi A6聚焦行,单击Save Index按钮,然后将焦点移开,最后单击Change Value按钮。正如预期的那样,已保存行中的单元格已被更改。

重新启动应用程序,现在首先对Name列排序,然后找到显示Audi A6的行。保存行句柄,现在是2 - 使用Save Index按钮,然后清除排序并注意行句柄是如何更改的。因此,如果您按下Change Value,保存的Audi A6行将不会更改。

使用数据源索引代替行句柄
要解决这个问题,需要修改代码,使其存储数据源索引而不是行句柄。然后,在Change Value处理程序中,将存储的索引转换为行句柄,然后才应用更改。
C#
int savedRowIndex; private void barButtonSaveIndex_ItemClick(object sender, ItemClickEventArgs e) { savedRowIndex = gridView1.GetDataSourceRowIndex(gridView1.FocusedRowHandle); } private void barButtonChangeValue_ItemClick(object sender, ItemClickEventArgs e) { int rowHandle = gridView1.GetRowHandle(savedRowIndex); gridView1.SetRowCellValue(rowHandle, colName, string.Empty); }
运行应用程序,看看代码现在是否按预期工作,即使在使用排序或过滤等数据整形操作时也是如此。
未完待续,我们下期见......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2024-02-18 2024年首发!高级界面控件Kendo UI全新发布2024 Q1
2022-02-18 界面开发组件Telerik UI for WinForms入门:VS扩展 - 创建项目
2022-02-18 「B/S端开发」DevExtreme ASP.NET MVC入门级教程 - 创建一个项目
2021-02-18 DevExpress WinForms帮助文档:表单控件 - Taskbar Assistant
2020-02-18 VCL界面开发还在犯难?DevExpress VCL v19.2.4全新发布帮你忙
2019-02-18 .NET界面控件DevExpress全新发布v18.2.6|附下载