| Autor |
Beitrag |
Christoph1972
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Di 17.03.09 10:47
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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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 
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: 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
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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 
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Di 17.03.09 13:32
OK, vielen Dank euch!!! Hätte ja sein können, das möglich ist.
Gruß
Christoph
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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);
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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 17.03.09 19:28
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 17.03.09 19:44
|
|