DevExpress ASP.NET MVC GridView如何按值设置聚焦行
MVCxGridView按单元格值匹配定位聚焦行实现方法
核心逻辑是先定位到目标值对应的行索引,再赋值给你已知的FocusedRowIndex属性即可,不需要依赖行键传参。
单页内匹配实现(当前分页可见范围查找)
直接在GridView的DataBound事件里遍历所有可见行,过滤非数据行后匹配目标单元格值即可,参考代码如下:
var grid = (MVCxGridView)s; // 遍历当前所有可见行 for (int rowIndex = 0; rowIndex < grid.VisibleRowCount; rowIndex++) { // 跳过表头、分组行、新增行等非数据行 if (grid.GetRowType(rowIndex) != GridViewRowType.Data) continue; // 读取目标列值,替换"Names"为你实际的列FieldName var currentName = grid.GetRowValues(rowIndex, "Names")?.ToString(); // 匹配目标值,这里用忽略大小写的对比,可根据需求调整 if (string.Equals(currentName, "Walter", StringComparison.OrdinalIgnoreCase)) { // 设置聚焦行 grid.FocusedRowIndex = rowIndex; // 可选:自动滚动表格到目标行位置 grid.MakeRowVisible(rowIndex); // 匹配成功后终止遍历 break; } }
跨分页匹配实现(全量数据范围查找)
如果表格开启了分页,上面的方法只会查找当前显示页的行,要全量查找可以直接从绑定的原始数据源匹配目标数据,再通过行键转成可见行索引:
var grid = (MVCxGridView)s; // 从原始绑定数据源查找匹配项,替换YourDataSource为你实际的数据源对象 var targetData = YourDataSource.Cast<YourDataModel>().FirstOrDefault(item => item.Names == "Walter"); if (targetData != null) { // 替换"Id"为你表格配置的主键字段名 var targetIndex = grid.FindVisibleIndexByKeyValue(targetData.Id); if (targetIndex >= 0) { grid.FocusedRowIndex = targetIndex; grid.MakeRowVisible(targetIndex); } }
注意事项
- 读取单元格值时传入的列名必须和GridView列配置的
FieldName完全一致,否则会返回空值导致匹配失败 - 如果目标列存储的是数值、枚举等非字符串类型,先做对应类型转换再对比,不要直接转字符串避免格式误差
- 如果表格开启了服务端模式(Server Mode),不要直接遍历
VisibleRowCount,建议通过数据源查询匹配后再用FindVisibleIndexByKeyValue定位,避免性能问题
内容的提问来源于stack exchange,提问作者Michaelweston
相关产品推荐
相关产品推荐

