2011-01-14 2 views
0

Это встроено в другой цикл, и это довольно медленно. Есть лучший способ сделать это?Если столбец ListView «x» содержит «значение»

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

    } 
}  
+1

Мы не можем быть уверены, нам нужно увидеть контур контейнера, чтобы увидеть, можно ли его улучшить. –

+0

Чак, строка «asdf» только что переключается с различными значениями в контуре контейнера. – sooprise

+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? Если нет, можете ли вы выполнить запрос один раз и повторно использовать результаты во внешнем цикле?

+0

Ницца, позвольте мне реализовать это (если нет лучшего предложения). – sooprise

+1

Су, как сказал Скит, это НИКОЙ путь, не самый быстрый. Вы должны предоставить более подробную информацию, чтобы получить лучший ответ –

+0

Предполагается ли это работать в WPF? У меня нет 'SubItems' в intellisense на' item'. – vapcguy

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; заявление в верхней части вашего класса, чтобы использовать его. Я нашел, что это сработало в WPF, и это может быть и в других областях (например, WinForms).

Смежные вопросы