Laden...

ListView mit Gruppen: Insert-Methode funktioniert nicht wie erwartet

Erstellt von VanKurt vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.274 Views
V
VanKurt Themenstarter:in
56 Beiträge seit 2006
vor 12 Jahren
ListView mit Gruppen: Insert-Methode funktioniert nicht wie erwartet

Hallo!
Ich würde gerne ein Item in eine Listview "inserten" (d.h. an einer beliebigen Position einfügen). Leider landet das Item IMMER an der letzten Position.

Hier der komplette Beispielcode:


// Setup list view
listView1.View = View.Details;
      
// Create a column
listView1.Columns.Add("Column");

// Create a group
listView1.Groups.Add(new ListViewGroup("Group"));

// Add items
listView1.Items.Add(new ListViewItem("Item 1", listView1.Groups[0]));
listView1.Items.Add(new ListViewItem("Item 2", listView1.Groups[0]));
listView1.Items.Add(new ListViewItem("Item 3", listView1.Groups[0]));

// Now try to insert an item (won't work!!!)
ListViewItem lvi = new ListViewItem("Item 0", listView1.Groups[0]);
listView1.Groups[0].Items.Insert(0, lvi);
listView1.Items.Insert(0, lvi);

Wie genau muss ich das anstellen, so dass das Item tatsächlich an Position 0, also ganz oben in meiner Liste, landet?

Danke!

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo VanKurt

bei mir funktioniert der Code. Item0 steht ganz am Anfang.

herbivore

V
VanKurt Themenstarter:in
56 Beiträge seit 2006
vor 12 Jahren

8o Waaaaaaaaaaaaas?

Ich hab's hier auch noch auf einem anderen Rechner ausprobiert, dort tritt das Problem auch auf. Was für eine Entwicklungsumgebung verwendest du denn?

Ich benutze hier VS2010, .NET Framework 4.0. Ob's daran liegt?

G
47 Beiträge seit 2011
vor 12 Jahren

Hi VanKurt,

leider scheint es so, dass sich die ListView bei der Verwendung von Gruppen nicht wie erwartet verhält.
Die Items werden nämlich grundsätzlich in der Reihenfolge dargestellt, in der sie der Gruppe hinzugefügt werden und nicht nach der Reihenfolge in der sie in der Items-Auflistung stehen.

Im Übrigen fügt dein Codebeispiel das Item zweimal in die Groups[0] ein. Das erste mal bei der Erstellung und danach noch einmal mit Insert.

Ein Workaround für das Problem wäre, die Gruppe für alle Elemente aus Groups[0] erst auf null zu setzen und danach wieder (in der richtigen Reihenfolge) auf Group[0].


            ListViewItem lvi = new ListViewItem("Item 0");
            listView1.Items.Insert(0, lvi);
            listView1.Groups[0].Items.Insert(0, lvi);

            foreach (ListViewItem item in listView1.Items)
            {
                item.Group = null;
                item.Group = listView1.Groups[0];
            }

@herbivore
Der Code funktioniert bei mir auch, wenn ich ihn im Konstruktor verwende. Wenn ich ihn in eine Funktion schreibe, die später ausgeführt wird, funktioniert es nicht mehr.
Wenn ListView.View auf List gesetzt ist, dann funktioniert der Code auch wie erwartet, doch dann ist ja gerade die Gruppierungsfunktion wieder weg.