So binden Sie eine List & lt; string & gt; zu einem DataGridView-Steuerelement?
Habe ich eine einfache List<string>
und ich möchte es angezeigt sein, in einem DataGridView
Spalte.
Wenn die Liste enthält mehr komplexe Objekte, einfach schaffen würde die Liste als Wert der DataSource
Eigenschaft.
Aber dabei:
myDataGridView.DataSource = myStringList;
Bekomme ich eine Spalte namens Length
und die Saiten' Längen angezeigt werden.
Wie die Anzeige der tatsächlichen string-Werte aus der Liste in einer Spalte?
InformationsquelleAutor der Frage agnieszka | 2009-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist, weil DataGridView sieht für Eigenschaften von Objekten. Für Strings gibt es nur eine Eigenschaft - Länge. So müssen Sie einen wrapper für string
Dann binden
List<StringValue>
Objekt an Ihr Stromnetz an. Es funktioniertInformationsquelleAutor der Antwort sinm
Versuchen Sie dies:
Ich hoffe, das hilft.
InformationsquelleAutor der Antwort Tamanna Jain
Folgendes sollte funktionieren, solange sind Sie verpflichtet, alles, was implementiert IEnumerable<string>. Es wird an die Spalte gebunden werden, die direkt auf den string selbst, sondern als eine Eigenschaft der Pfad des string-Objekts.
InformationsquelleAutor der Antwort jamisonLikeCode
können Sie auch verwenden, linq und anonyme Typen zu erreichen das gleiche Ergebnis mit viel weniger code, wie beschrieben,hier.
UPDATE: blog ist down, hier ist der Inhalt:
(..) Die in dieser Tabelle dargestellten Werte repräsentieren die Länge des strings anstelle von string-Werten (!)
Es mag seltsam erscheinen, aber das ist, wie verbindlich Mechanismus standardmäßig funktioniert – gegeben ein Objekt, die Sie versuchen zu binden, um die erste Eigenschaft des Objekts (die erste Eigenschaft, die es finden kann).
Wenn übergeben Sie eine Instanz der String-Klasse die Eigenschaft, die es bindet, ist String.Länge, da es keine andere Eigenschaft, die die tatsächliche Zeichenfolge selbst.
Das bedeutet, dass unsere Bindung rechts benötigen wir ein wrapper-Objekt, das aussetzen der tatsächliche Wert eines string als Eigenschaft:
Obwohl diese Lösung funktioniert, wie erwartet, es erfordert durchaus ein paar Zeilen code (meist zu konvertieren Liste von strings zur Liste der string-Wrapper).
Können wir verbessern diese Lösung mit LINQ und anonyme Typen - wir werden die LINQ-Abfrage, um eine neue Liste von string-Wrapper (string wrapper wird ein anonymer Typ in unserem Fall).
Die Letzte änderung, die wir machen, ist das verschieben der LINQ-code einer extension Methode:
Diese Weise können wir die Wiederverwendung von code durch den Aufruf einer einzigen Methode, die auf eine Sammlung von strings:
InformationsquelleAutor der Antwort Jarek Kardas
Dies ist häufiges Problem, eine weitere Möglichkeit ist die Verwendung von DataTable-Objekt
Dieses problem wird im detail hier beschrieben: http://www.psworld.pl/Programming/BindingListOfString
InformationsquelleAutor der Antwort user1246920
Versuchen Sie dies :
InformationsquelleAutor der Antwort Neojt
Vielleicht laufen Sie performance-Probleme, wenn die Zuordnung wirklich große Listen durch LINQ.
Folgende Lösung ist geeignet für große Listen und ohne Unterklassen von String:
Set DataGridView (hier: "Anzeigen") auf den virtuellen Modus, erstellen Sie die Spalte, die Sie brauchen und überschreiben /für Ereignis registrieren CellValueNeeded
dann können Sie einfach ordnen Sie Ihre Liste, um DataGridView:
InformationsquelleAutor der Antwort user3042599
Eine Alternative ist die Verwendung eines neuen Helfer-Funktion die Werte aus der Liste und update in das DataGridView wie folgt:
Dann können wir diese Funktion aufrufen, die folgende Art und Weise:
InformationsquelleAutor der Antwort Sudeep