如何实现点击GridView2行时,让GridView1定位至对应姓氏行?
实现GridView点击联动定位功能(基于Surname字段)
根据你的需求,这里给你一套可行的实现方案,核心是借助两个GridView的共同关联字段SURNAME完成联动定位:
1. 给GridView2绑定行点击事件
首先,你需要给名为List的GridView2添加RowClick事件(或者FocusedRowChanged事件,根据你的交互习惯选择),这样用户点击任意行时就能触发定位逻辑。
2. 获取GridView2选中行的Surname值
在事件方法中,先获取当前点击行的SURNAME字段值——和你现有代码的思路类似,只是切换到GridView2:
// 获取GridView2点击行的Surname值 string targetSurname = Convert.ToString(gridView2.GetRowCellValue(e.RowHandle, "SURNAME"));
注意:这里用
e.RowHandle直接获取点击的行句柄,比用FocusedRowHandle更准确,避免焦点延迟的问题。
3. 在GridView1中定位对应记录
接下来用DevExpress GridView内置的LocateByValue方法高效查找匹配的行,找到后设置焦点并确保该行可见:
if (!string.IsNullOrEmpty(targetSurname)) { // 在GridView1中查找Surname匹配的行 int matchedRowHandle = gridView1.LocateByValue("SURNAME", targetSurname); // 如果找到有效行,执行定位操作 if (matchedRowHandle != DevExpress.XtraGrid.GridControl.InvalidRowHandle) { gridView1.FocusedRowHandle = matchedRowHandle; gridView1.MakeRowVisible(matchedRowHandle, true); // 滚动到目标行,确保用户能看到 } }
完整事件代码示例
把逻辑整合起来,完整的事件方法如下:
private void gridView2_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) { // 跳过无效行(比如分组行、空行) if (e.RowHandle < 0) return; // 获取目标Surname string targetSurname = Convert.ToString(gridView2.GetRowCellValue(e.RowHandle, "SURNAME")); if (string.IsNullOrWhiteSpace(targetSurname)) return; // 查找并定位GridView1中的对应行 int matchedRowHandle = gridView1.LocateByValue("SURNAME", targetSurname); if (matchedRowHandle != DevExpress.XtraGrid.GridControl.InvalidRowHandle) { gridView1.FocusedRowHandle = matchedRowHandle; gridView1.MakeRowVisible(matchedRowHandle, true); } }
额外注意事项
- 确保两个GridView的
SURNAME字段数据类型一致,避免因类型不匹配导致查找失败 - 如果GridView1开启了分组或过滤,
LocateByValue会在当前显示的数据集内查找,符合预期 - 若需要更流畅的交互,可以在定位前先取消GridView1的当前选中状态(可选)
内容的提问来源于stack exchange,提问作者Burak Turhan
相关产品推荐
相关产品推荐

