Daten aus List <string> in ein ListViewSubitem einlesen

maikmaik

Grünschnabel
Hallo zusammen,

ich programmiere in .Net 2.0 WinForms. Listview im Details Format.

Ich möchte gerne in ein Subitem einer Listview die Elemente einer Liste mit Kommas getrennt ausgeben. Also quasi: Element0, Element1, Element2... in einer Zeile in einer Zelle. Geht das?

Hier mein Beispielcode:
Code:
                 for (int i = 0; i != groups.Count; i++)
                {
                    item3.SubItems.Add(groups[i]);
                    item3.SubItems.Add(", ");
                }
                listView1.Items.AddRange(new ListViewItem[] { item3 });

Das Ergebnis ist leider nur, dass nur das erste Element ausgegeben wird und das wars. Ich weiß aber das es noch viel mehr Elemente gibt. Ist das überhaupt möglich mit einer Listview?

Vielen Dank!

Maik
 
Zuletzt bearbeitet:
Hallo,

ich nehme an, item3 ist ListViewItem.
Du fügst derzeit immer wieder neue Subitems in Item3 ein, die siehst du aber nur wenn du auch entsprechend viele "Columns" in der ListView definierst.

Wenn du aber alle Werte in einer Spalte mit Komma getrennt haben möchtest, darfst du nicht immer Subitems anlegen.

C#:
string tmp = "";
for (int i = 0; i < groups.Count; i++)
{
     tmp += groups[i] + ',';
}
tmp = tmp.Substring(0, tmp.Length - 1); // letztes Komma abschneiden
ListViewItem item = new ListViewItem(tmp);
this.listView1.Items.Add(item);
 
Hi Turri,

Vielen Dank für Deine Antwort. Ich habe das Problem in meiner Not mit einem Stringbuilder gelöst. Ich füge dabei einfach alle Elemente meiner List <string> zu einem einzigen String zusammen und gebe den aus. Vorher habe ich beim einlesen in die List <string> die einzelnen Elemente mit "," getrennt.

Aber ich werde mich gleich an Deinen Vorschlag machen.

Viele Grüße

Maik
 
Hi.

Das Zusammenfügen geht auch ohne eigene Schleife.

C#:
string text = string.Join(", ", groups.ToArray());

Zu deiner ersten Lösung, mit den ListViewItems. Du erstellst da nur ein einziges Item, und fügst diesem SubItems hinzu. Diese werden nur angezeigt, wenn du die DetailAnsicht der ListView benutzt, und entsprechend viele Spalten angelegt hast.

Wenn du jeden Wert aus deiner Liste als eigenen Eintrag haben möchtest, müsste es so aussehen:

C#:
for (int i = 0; i != groups.Count; i++)
{
    listView1.Items.Add(new ListViewItem(groups[i]));
}

lg,..
 
Zu deiner ersten Lösung, mit den ListViewItems. Du erstellst da nur ein einziges Item, und fügst diesem SubItems hinzu. Diese werden nur angezeigt, wenn du die DetailAnsicht der ListView benutzt, und entsprechend viele Spalten angelegt hast.
Das hab ich doch auch schon geschrieben :rolleyes:

Wenn du jeden Wert aus deiner Liste als eigenen Eintrag haben möchtest, müsste es so aussehen:

C#:
for (int i = 0; i != groups.Count; i++)
{
    listView1.Items.Add(new ListViewItem(groups[i]));
}
Soweit ich ihn verstanden hatte, soll die Ausgabe in eine einzelene Zelle rein, oder?
 
Hey,

natürlich müssen die Spalten vorher erstellt werden dyn. o. stat., aber so habs ich gemacht...

Code:
List<ListViewItem> lvItemList = new List<ListViewItem>();

while(lines!=end) // solange die Ressource nicht erschöpft ist
{
       // columnDataArray = eine Zeile in der Listview
       lvItemList.Add(new ListViewItem(columnDataArray));
}

// hinterher Alle Zeilen der ListView anhängen
ListView.Items.AddRange(lvItemList.ToArray());


MfG
 
Hi

Brauchst du die Liste noch an andere Stelle?
Du solltest zum Füllen besser die Variante aus Alex' erstem Post nutzen!
 
Hey

meinst du wegen der SpeicherEffizienz? oder wegen der Echtzeitaktualisierung ^^ ?

Bedingt durch die Größe der zu verarbeitenden Daten, würde ich mich für eine Variante entscheiden.

MfG
 
Zurück