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

DevExpress WinForms中文教程:Grid View - 如何实现识别行操作?(一)

来源:   发布时间:2025-02-17   浏览:325次

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

在本教程中,您将了解到DevExpress WinForms网格视图标识其行的方式。

  • 数据源行索引
  • 行处理
  • 可见索引

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

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

概述

数据源索引是指绑定列表中的记录,您将使用它们进行数据编辑。每个数据行都有一个惟一的索引,而组行只引用第一个可用的数据行,而服务行返回负值。

DevExpress WinForms中文教程图集

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

DevExpress WinForms中文教程图集

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

DevExpress WinForms中文教程图集

现在仔细看看何时使用每种类型的行标识符以及它们之间的区别。

纯数据中的行标识符

如果网格显示的是普通数据,那么这三个标识符在每行中通常是相同的,它们都是以0开头的行下标。

DevExpress WinForms中文教程图集
排序和过滤数据时行标识符之间的差异

数据排序

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

DevExpress WinForms中文教程图集

过滤数据

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

DevExpress WinForms中文教程图集

错误使用行句柄

重要的一点是,行句柄和可见索引会随着用户操作的变化而变化,创建一个简单的示例来说明这一点。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按钮。正如预期的那样,已保存行中的单元格已被更改。

DevExpress WinForms中文教程图集

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

DevExpress WinForms中文教程图集

使用数据源索引代替行句柄

要解决这个问题,需要修改代码,使其存储数据源索引而不是行句柄。然后,在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);
}

运行应用程序,看看代码现在是否按预期工作,即使在使用排序或过滤等数据整形操作时也是如此。

未完待续,我们下期见......

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


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

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

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

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

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