如何获取DataView中选中DataRowView的索引?附现有实现代码
解决DataView中获取选中DataRowView索引的问题
嘿,我懂你现在的困扰——想在DataView里定位到包含指定字符串的DataRowView的索引对吧?你用foreach循环的方式确实没法直接拿到索引,不过有几个简单的方案可以搞定这个问题:
方案一:用for循环直接访问索引
foreach遍历集合时不会暴露当前元素的索引,换成for循环就能直接通过下标访问,代码更直观:
private long GetSelectedIndex(DataView dataView, string searchString) { for (int i = 0; i < dataView.Count; i++) { DataRowView rowView = dataView[i]; // 这里可以根据实际需求优化匹配逻辑,比如指定列名更精准 if (rowView.Row.ItemArray.Contains(searchString)) { return i; // 找到匹配项直接返回索引 } } return -1; // 未找到匹配项时返回-1,比返回0更能区分状态 }
方案二:foreach循环中维护计数器
如果你更习惯用foreach,也可以自己维护一个计数器变量来追踪当前索引:
private long GetSelectedIndex(DataView dataView, string searchString) { long selectedIndex = 0; foreach(DataRowView dataRow in dataView) { if(dataRow.Row.ItemArray.Contains(searchString)) { return selectedIndex; // 匹配成功,返回当前计数器值 } selectedIndex++; // 未匹配则计数器加一 } return -1; // 未找到返回-1 }
额外提示:优化匹配逻辑
你当前用的ItemArray.Contains(searchString)存在潜在问题:比如如果列值的类型和字符串不匹配(比如数值型列),或者你只想匹配某一列的内容,这种方式就不够精准。建议换成指定列名的方式,比如:
// 假设你要匹配"UserName"列的内容,还可以忽略大小写 if (rowView["UserName"].ToString().Equals(searchString, StringComparison.OrdinalIgnoreCase))
这样能避免不必要的匹配错误,也让逻辑更清晰。
内容的提问来源于stack exchange,提问作者jDave1984
相关产品推荐
相关产品推荐

