Entwickler-Ecke
WinForms - ListBox Items in List<String> kopieren?
Christoph1972 - Di 17.03.09 10:47
Titel: ListBox Items in List<String> kopieren?
Hallo Leute,
ich möchte alle Values einer ListBox in eine List<String> kopieren. Ist das auch als Einzeiler möglich?
Gruß
Christoph
Moderiert von
Kha: Topic aus Basistechnologien verschoben am Di 17.03.2009 um 14:11
Ralf Jansen - Di 17.03.09 10:55
Wenn du die List<String> schon an die ListBox gebunden hast (DataSource Property) ist es ein 0-Zeiler.
Die Frage ist was hast du für Objekte an die ListBox gebunden?
Christoph1972 - Di 17.03.09 11:32
Das DataSource der LB ist an ein DataTable gebunden. Ich möchte den Text der Items in eine List<String> kopieren. Die Liste wird an einen anderen Programmteil weitergegeben.
Gruß
Christoph
JüTho - Di 17.03.09 13:21
Hallo Christoph,
dann geht es nicht als Einzeiler: Elemente der ListBox sind die Zeilen der DataTable, diese könnten direkt übergeben werden. Per DisplayMember holst Du aber aus jeder Zeile genau einen Wert. Es gibt keine direkte Maßnahme, alle Werte dieser Spalte direkt in eine List<string> zu übernehmen. Du musst es durch eine Schleife machen.
(Vor wenigen Monaten gab es eine längere Diskussion darüber, wie das am besten und schnellsten erledigt werden kann - ich glaube, das war hier im c-sharp-forum. Mit der Suche nach "spalte, array" habe ich aber noch nichts Passendes gefunden.)
Gruß Jürgen
Christoph1972 - Di 17.03.09 13:32
OK, vielen Dank euch!!! Hätte ja sein können, das möglich ist.
Gruß
Christoph
Ralf Jansen - Di 17.03.09 18:10
Direkt geht kein Einzeiler(außer es gibt in Linq noch irgendwo eine schicke Cast<> Methode die ich nicht kenne).
Damit es im relevanten Code wie ein Einzeiler aussieht könnte man eine Extension Method schreiben. Ich würde das aber nicht an die ListBox sondern direkt an der Datenquelle hängen. In deinem Fall würde ich eine Extension Method für die DataRowCollection der DataTable schreiben.
Dann kann man am Ende soetwas schreiben wie
List<string> meineListe = meineDataTable.Rows.AsList<string>(MeineDataColumnDessenSpaltenwerteIchMoechte);
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| static class Program { static void Main() { DataTable dt = new DataTable(); DataColumn dcA = dt.Columns.Add("A", typeof(string)); DataColumn dcB = dt.Columns.Add("B", typeof(string)); DataColumn dcC = dt.Columns.Add("C", typeof(string));
dt.Rows.Add(new Object[] { "a1", "b1", "c1" }); dt.Rows.Add(new Object[] { "a2", "b2", "c2" }); dt.Rows.Add(new Object[] { "a3", "b3", "c3" });
List<string> list = dt.Rows.AsList<string>(dcA); } }
public static class ExtensionMethod { public static List<T> AsList<T>(this DataRowCollection rows, DataColumn column) { List<T> list = new List<T>();
foreach (DataRow row in rows) { T value = (T)Convert.ChangeType(row[column], typeof(T), CultureInfo.CurrentCulture); list.Add(value); }
return list; } } |
Kha - Di 17.03.09 19:28
Ralf Jansen hat folgendes geschrieben : |
| außer es gibt in Linq noch irgendwo eine schicke Cast<> Methode die ich nicht kenne |
Ihren Namen scheinst du aber schon zu kennen :zwinker: ?
C#-Quelltext
1:
| table.Rows.Cast<DataRow>().Select(row => (string)row[column]).ToList() |
Ralf Jansen - Di 17.03.09 19:44
Kennen ja. Vermuten das das damit irgendwie gehen muß auch. Mir fehlt nur noch das Gefühl wie und wann Linq/Lambdas einzusetzen sind.
Aber ich habe darauf spekuliert das sich da jemand auskennt und auf das Stichwort anspringt. Hat bei dir ja funktioniert :zwinker:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!