说明
我有一个主/从网格。 当我尝试使用细节视图的 ColumnView.FocusedRowHandle 属性时,始终返回 -999999。 主表网格视图的 FocusedRowHandle 属性能返回正确的结果。 我的代码如下:
C# | 复制代码 |
---|---|
int row = gridView2.FocusedRowHandle; // gridView2 is a detail Grid View Console.WriteLine(row); // row is always -999999 |
解决方案
在主/从模式中,在细节视图上执行特定的数据操作 (删除和获取记录,折叠/展开分组行和主控行等) 之时,一个共同的错误是使用了在设计时刻创建的并用作 GridControl 子层级的模式视图。 模式视图不包含任何数据,也不会被显示在屏幕上。 模式视图只是作为模板,也即它们为实际的细节视图 (克隆) 提供布局设置。 在 模式视图与克隆视图 主题中,您可以获得关于模式视图与克隆视图的详细信息。 有多种方式访问实际的在运行时刻与最终用户交互的网格视图:
- GridControl.MainView 属性 —— 返回网格中最顶层的视图;
- GridControl.FocusedView 属性 —— 返回获得焦点的视图;
- 视图的特定事件的 sender 参数;
- GridView.GetDetailView 方法 —— 返回给定主控行的细节视图。
在获取所需的视图之后,就可以通过视图的 ColumnView.FocusedRowHandle 属性获取当前获得焦点的行,或者使用细节视图的其他任何属性、方法。
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Base; // Obtain the focused row of the currently focused view int row = (gridControl1.FocusedView as ColumnView).FocusedRowHandle; // Obtain the focused view of a specific detail view // gridView1 corresponds to GridControl.MainView ColumnView detailView = gridView1.GetDetailView(0, 0) as ColumnView; row = detailView.FocusedRowHandle; |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Base ' Obtain the focused row of the currently focused view Dim row As Integer = CType(gridControl1.FocusedView, ColumnView).FocusedRowHandle ' Obtain the focused view of a specific detail view ' gridView1 corresponds to GridControl.MainView Dim detailView As ColumnView = CType(gridView1.GetDetailView(0, 0), ColumnView) row = detailView.FocusedRowHandle |