如果ListView列“x”包含“值”

时间:2011-01-14 21:19:16

标签: c# listview

这是嵌入在另一个循环中,嗯,它很慢。有更好的方法吗?

for(int i=0;i< listView.Items.Count;i++)
{
    if(listView.Items[i].SubItems[3].Text == "asdf")
    {

    }
}    

2 个答案:

答案 0 :(得分:2)

有一种更好的方式:

foreach (ListViewItem item in listView.Items)
{
    if (item.SubItems[3].Text == "asdf")
    {
         ...
    }
}

或者您可以使用LINQ:

var query = listView.Items
                    .Cast<ListViewItem>()
                    .Where(item => item.SubItems[3].Text == "asdf");
foreach (var item in query)
{
    ...
}

我怀疑那会更快......

你的外环是否会改变listView?如果没有,你可以进行一次查询并在外循环中重用结果吗?

答案 1 :(得分:0)

如果有人使用WPF遇到此问题,那么当您使用.SubItems时,item上的foreach (ListViewItem item in listView.Items)将无法获得DataRowView。相反,我发现我可以使用foreach (DataRowView drv in listView.Items) { if (drv.Row[3].ToString() == "asdf") { ... } } 并以这种方式获取单元格的值:

using System.Data;

您必须在课程顶部添加EMFILE语句才能使用它。我发现它在WPF中工作,也可能在其他领域(即WinForms)。