Finden DataGridView-Element (Zeile) durch den Tag
Hallo ich habe eine DataGridView-Steuerelement, das ich manyally füllen mit Gegenständen (keine DataSource)
wie
int row = dgvClients.Rows.Add();
dgvClients.Rows[row].Cells["ClientObjectID"].Value = somevalue1;
dgvClients.Rows[row].Cells["ClientCode"].Value = somevalue2;
dgvClients.Rows[row].Tag = SomeObject1;
Pls beachten Sie, dass jede Zeile in gridview stellt ein Objekt und seine Tag festgelegt ist, um bestimmte Objekt. Nur eine Zeile haben kann-Tag-Referenz zu einem SomeObject. Keine Duplikate.
Nun muss ich feststellen datagridview ZEILE mit Verweis auf SomeObject. Was ist der beste Weg?
Lassen Sie mich klarstellen. Ich habe einige Tabelle und der Benutzer kann text eingeben, um Elemente zu finden. Brauche ich, um wählen Sie die Zeile mit den erforderlichen text. Ich Frage mich, ob es gibt einige "Muster". Ich will nicht, um straight-iteration und überprüfen
Also der durchsuchbare text ist in Tag-und nicht in den anderen Spalten?
Tag ist der Verweis auf einige Klasse, einige Eigenschaften (strings) werden im datagridview die Spalten repräsentieren alle diese Eigenschaften und Zeilen repräsentiert verschiedene Instanzen einer Klasse. Benutzer text eingibt, und sagt, welche Eigenschaft (Spalte) ist. Ich brauche, um zu finden die richtige Zeile, und wählen Sie es.
Also der durchsuchbare text ist in Tag-und nicht in den anderen Spalten?
Tag ist der Verweis auf einige Klasse, einige Eigenschaften (strings) werden im datagridview die Spalten repräsentieren alle diese Eigenschaften und Zeilen repräsentiert verschiedene Instanzen einer Klasse. Benutzer text eingibt, und sagt, welche Eigenschaft (Spalte) ist. Ich brauche, um zu finden die richtige Zeile, und wählen Sie es.
InformationsquelleAutor Captain Comic | 2009-11-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist etwas, das ich zusammengestellt habe, die könnten tun, was Sie beschreiben. Es ist quick and dirty, aber es könnte Euch gehen:
Habe ich ein leeres DataGridView, eine combobox und ein Textfeld auf einem Formular. Testobjekt ist eine Klasse, die ein Objekt mit 3 string-Eigenschaften, die für Testzwecke von diesem Beispiel.
Für Leichtigkeit, Initialisiere ich eine generische Liste mit ein paar Instanzen von TestObject. Ich habe dann manuell hinzufügen 3 Spalten im datagridview, die entsprechen, um die 3 Eigenschaften von TestObject. Ich iteriere durch die Liste, und fügen Sie manuell hinzu, um die "datagridview", sowie eigentlich das speichern des Objekts in der Zeile der tag-Eigenschaft als auch.
Ich dann Füll die combobox mit verweisen auf die Spalten in der datagridview. Der Benutzer auswählen, welche Spalte Sie/er will, zu suchen, dann geben Sie den text passend in das Textfeld ein.
Ich dann mit der textbox-textchanged-Ereignis zu suchen, die die datagridview auf der Basis der Spalte, die ausgewählt in der combobox und der text in der textbox. Für einen größeren Datenbestand, Sie würden nicht wollen, behandeln Sie das textchanged-Ereignis, weil es zu langsam wäre, um die Suche nach jedem Buchstaben ändern.
Ohne eine datatable oder eine Datenquelle, kann ich mir nicht vorstellen, dass es eine einfache Möglichkeit zum durchsuchen der Zeilen ohne Iteration. Ich weiß nicht, Ihren Anforderungen, aber ich würde eine bindingsource mit einer Liste oder ein datatable-auf ein minimum. Mit einer bindingsource-man könnte auch einen filter anzuwenden und dynamisch und zeigt nur diejenigen Ergebnisse, die Ihrer Suche entsprechen.
InformationsquelleAutor Jon Comtois
Könnte man mit LINQ und die Ergebnisse, wie der datagridview datasource. So alle Sie tun müssen, würde ist ausführen von LINQ, die Bindung an das datagridview, und dann aktualisieren Sie Sie.
In VB würde ich code es so:
Wenn niemand anderes kommt mit einer besseren Antwort-ich erstelle ein test-Projekt an diesem Abend geben Sie praktische C# - code.
Wade
Ja, LINQ ist nichts anderes als Erweiterung Methoden. Blick auf diese post - stackoverflow.com/questions/2138/linq-on-the-net-2-0-runtime
Es wäre schön, wenn Sie nach unten abstimmen, meine Antwort auf einen Kommentar hinzufügen, um zu erklären, warum. Wie kann ich verbessern ohne es?
Ich habe ein +1 auf diese Antwort, denn es bietet eine schöne Lösung mit den neuesten Versionen von .net. Nicht sicher, wo die -1 kommt von...
InformationsquelleAutor Wade73