)
DevExpress WinForms拥有180组件和UI库能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序无论是Office风格的界面还是分析处理大批量的业务数据它都能轻松胜任在本教程中您将了解到DevExpress WinForms网格视图标识其行的方式。数据源行索引行处理可见索引DevExpress新旧版本帮助文档获取可点击这篇文章查看——《界面控件DevExpress v26.1帮助文档大全CHM版本》概述数据源索引是指绑定列表中的记录您将使用它们进行数据编辑。每个数据行都有一个惟一的索引而组行只引用第一个可用的数据行而服务行返回负值。网格视图使用行句柄来标识任何类型的行组行有连续的负索引服务行有预定义值数据行有正索引。最后可见索引按照在屏幕上显示的顺序枚举所有行这些标识符主要用于实现行导航。现在仔细看看何时使用每种类型的行标识符以及它们之间的区别。纯数据中的行标识符如果网格显示的是普通数据那么这三个标识符在每行中通常是相同的它们都是以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); }运行应用程序看看代码现在是否按预期工作即使在使用排序或过滤等数据整形操作时也是如此。未完待续我们下期见......