C# Liste mit Items aus ListView füllen, wie?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich hab das jetzt so verstanden, dass du jede Spalte als einen String haben möchtest.
Column = Spalte, Row = Zeile

// Ich nenne das ListView Objekt jetzt mal lv_example
// und das List<string> Objekt list_example

for(int i = 0; i < lv_example.Columns.Count; i++)  // für jede Spalte
{
    string temp = "";
    foreach(ListViewItem row in lv_example.Items)  // für jede Zeile
    {
        temp += row.Subitems[i].Value.ToString();  // i = Spalte
    }
    list_example.Add(temp);
}
Woher ich das weiß:Studium / Ausbildung – Softwareentwickler mit 10 Jahren Berufserfahrung 💾
2t3113RD3RFR4G3 
Fragesteller
 21.08.2018, 10:04

Vielen Dank für das Beispiel.

Habe mich wahrscheinlich etwas blöd ausgedrückt.

Ich habe 7 Spalten und möchte als Endprodukt immer für jede Zeile einen String der alle Felder der 7 Spalten beinhaltet.

0
Knomle  21.08.2018, 10:08
@2t3113RD3RFR4G3

Dann musst du eigentlich nur die beiden Schleifen tauschen

foreach(ListViewItem row in lv_example.Items)  // für jede Zeile
{
    string temp = "";
    for(int i = 0; i < lv_example.Columns.Count; i++)  // für jede Spalte
    {
        temp += row.Subitems[i].Value.ToString();  // i = Spalte
    }
    list_example.Add(temp);
}
1
2t3113RD3RFR4G3 
Fragesteller
 21.08.2018, 10:21
@Knomle

Vielen Dank bis auf

"temp += row.Sub....." funktioniert der Code

Hier erhalte ich einen Fehler

Severity	Code	Description	Project	File	Line	Suppression State
Error	CS1061	'ListViewItem.ListViewSubItem' does not contain a definition for 'Value' and no extension method 'Value' accepting a first argument of type 'ListViewItem.ListViewSubItem' could be found (are you missing a using directive or an assembly reference?)

Muss nicht statt Value hier .Text stehen ?

0
Knomle  21.08.2018, 10:23
@2t3113RD3RFR4G3

Oh Mist mein Fehler. Die Zeile müsste so lauten:

temp += row.Subitems[i].Text;  // i = Spalte
2
List<string> items = new List<string>();
foreach (ListViewItem itm in listView1.Items)
{
    items.Add(itm.ToString());
}

MFG xGlumi

Woher ich das weiß:eigene Erfahrung
2t3113RD3RFR4G3 
Fragesteller
 21.08.2018, 09:57

Nun wird in die Liste folgender String eingefügt "ListViewItem: {Wert}"
das bedeutet also ohne Subitems und leider mit dem Zusatz "ListViewItem", weißt du zufällig wie ich das beheben kann ?

1
xGlumi  21.08.2018, 10:10
@2t3113RD3RFR4G3
items.Add(itm.ToString());

ersetzen mit

                string newItm = "";
                for (int i = 0; i < itm.SubItems.Count; i++)
                {
                    newItm += itm.SubItems[i];
                }

Musst noch ein Trennzeichen hinzufügen (ich weiss ja nicht, wie du die Spalten voneinander trennen möchtest)

MFG xGlumi

0
Knomle  21.08.2018, 10:10

item.ToString( ) gibt allerdings nicht den Inhalt, sondern die Objekt Bezeichnung zurück. Zudem handelt es sich dabei nur um ein ListViewItem (Spalte) und nicht um eine Zelle. An die Zellen kommt man mit ListViewItem.Subitem[index].Value.ToString( )

0
Knomle  21.08.2018, 10:24
@Knomle
An die Zellen kommt man mit ListViewItem.Subitem[index].Value.ToString( )

Korrigiere: ListViewItem.Subitem[index].Text;

0