ListView Ausgewählte Zeile mit string vergleichen c#?
Problem: -> Ich habe eine ListView mit fünf Spalten
//Darstellung der ListView
x x x x x
x x x x x
x x x x x
x x x x x
// Die ListView hat fünf spalten und kann unendlich* lang werden.
Nun möchte ich, wenn ich eine Zeile Auswähle, dass ein Algorithmus prüft ob in der Kompletten Zeile eine bestimmte Zeichenfolge vorhanden ist.
Bsp.
C:\test\ | 01 | Template | Name | XML // -> | <- soll die Spalten darstellen
jetzt soll der Algorithmus gucken ob in der Zeile z.B. das Wort "Template" drin vorkommt.
könnt ihr mir helfen?
2 Antworten
Das sollte so funktionieren (ich habe es nun nicht explizit getestet):
foreach (ListViewItem listItem in YourListView.Items)
{
var rowData = string.Concat(listItem.SubItems.Select(item => item.Text));
if (rowData.Contains("Template"))
{
// do something ...
}
}
Mittels Linq werden hier alle Texte der Subitems ausgewählt und dann konkateniert.
Ebenso könntest du auch wirklich durch jedes Subitem laufen:
foreach (ListViewItem listItem in YourListView.Items)
{
if (listItem.SubItems.Any(item => item.Text.Contains("Template"))
{
// do something ...
}
}
Oder wenn du nur bei einer bestimmten Spalte schauen möchtest:
var columnToCheck = 1; // or any other ...
foreach (ListViewItem listItem in YourListView.Items)
{
if (listItem.SubItems[columnToCheck].Text.Contains("Template"))
{
// do something ...
}
}
Wenn du case insensitive prüfen möchtest, verwende IndexOf.
Du gehst Zeile für Zeile durch die Elemente in der ListView (am besten mit einer foreach-Schleife). Bei jedem Element prüfst du, ob der gesuchte String darin enthalten ist, indem du die String.Contains()-Methode aufrufst. Hier ein kleines Beispiel, wie das funktioniert (nicht für mit einer ListView):
string str1 = "Hello World!";
string str2 = "ello";
Console.WriteLine(str1.Contains(str2));
Console.WriteLine(str1.Contains("war"));
Console.WriteLine(str1.Contains("H"));
Console.WriteLine(str1.Contains("world"));
/* Ausgabe:
* true
* false
* true
* false
*/
Bitte beachte, dass Contains() case-sensitive ist, als Groß- und Kleinschreibung beachtet wird. Um ganz sicher zu gehen, empfehle ich dir, beide Strings vorher mit String.ToLower() in Kleinbuchstaben umzuwandeln.
Siehe auch in der Dokumentation: String.Contains(String)