You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:42:14