2011-01-14 10 views
0

Dies ist in eine andere Schleife eingebettet, und nun, es ist ziemlich langsam. Gibt es einen besseren Weg, dies zu tun?Wenn ListView Spalte "x" enthält "Wert"

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

    } 
}  
+1

Wir können nicht sicher sein, wir müssen eine Containerschleife sehen, um zu sehen, ob es verbessert werden kann –

+0

Chuck, die Zeichenkette "asdf" wird gerade mit anderen Werten in der Containerschleife geschaltet. – sooprise

+0

Wie viele Elemente deckt diese Schleife ab und wie viele Elemente durchläuft die äußere Schleife? –

Antwort

2

Nun gibt es einen schöne Weg, es zu tun:

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

Oder Sie könnten LINQ verwenden:

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

Ich bezweifle, dass die schneller obwohl sein ...

Ändert Ihre äußere Schleife die listView? Wenn nicht, könnten Sie die Abfrage einmal ausführen und die Ergebnisse in der äußeren Schleife wiederverwenden?

+0

Schön, lass mich das umsetzen (wenn es keinen besseren Vorschlag gibt). – sooprise

+1

Soo, wie Skeet sagte, das ist ein NICER Weg nicht ein SCHNELLER Weg. Sie müssen weitere Details angeben, um die beste Antwort zu erhalten. –

+0

Soll das in WPF funktionieren? Ich habe keine "SubItems" in IntelliSense auf "item". – vapcguy

0

Falls jemand mit WPF über dieses Gerät läuft, erhalten Sie .SubItems unter item nicht, wenn Sie foreach (ListViewItem item in listView.Items) verwenden. Stattdessen fand ich, dass ich nur DataRowView nutzen konnte und den Wert der Zelle auf diese Weise erhalten:

foreach (DataRowView drv in listView.Items) 
{ 
    if (drv.Row[3].ToString() == "asdf") 
    { 
     ... 
    } 
} 

Sie können eine using System.Data; Anweisung an den Anfang Ihrer Klasse hinzuzufügen, es zu benutzen. Ich fand es in WPF funktioniert, und es könnte auch in anderen Bereichen (d. H. WinForms).

Verwandte Themen