Benutzer mit den meisten Antworten
Listview und DisplayIndex

Frage
-
Hallo!
Bug oder Bug in meinem Kopf?
Gestern fiel mir auf, dass bei einer Anwendung, bei der ich die ColumnOrder speichere, eine Spalte im Listview von Programmstart zu Programmstart nach hinten durchgereicht wurde. Hier mal ein simples Beispiel:
listView1.Columns.Add("A"); listView1.Columns.Add("B"); listView1.Columns.Add("C"); listView1.Columns.Add("D"); listView1.Columns.Add("x"); listView1.Columns.Add("y"); int[] dispindices = new int[] { 0, 1, 4, 5, 3, 2 }; for (int i = 0; i < 6; i++) listView1.Columns[i].DisplayIndex = dispindices[i]; for (int i = 0; i < 6; i++) Console.Write(listView1.Columns[i].DisplayIndex);
Erwartet habe ich A B y x C D. Bekommen tue ich A B y C x D.
Ausgabe auf der Console ist auch : 013542. Stecke ich das wieder rein, bekomme ich 013452. Das x wandert also nach hinten. Mache ich irgendwas falsch? Stecke ich z.B. { 0, 1, 4, 5, 2, 3 } bekomme ich auch das gewünschte A B x y C D. Irgendwie ist es dabei entscheidend, dass die beiden nach vorne verschobenen Spalten die Reihenfolge zueinander ändern.
Gruß
Jan
Microsoft Visual C# 2010 Express
- Bearbeitet Jan Voges Donnerstag, 2. Juni 2011 23:39 Leerzeilen gelöscht
Antworten
-
Hallo Jan,
das Verhalten ist korrekt so.
Was Du eventuell nicht bedacht hast, ist, dass beim Setzen des DisplayIndex ja die Spalten auch eine andere Reihenfolge bekommen und somit nun DisplayIndexe, die größer sind, um einen kleiner gesetzt werden müssten.Lange Rede kurzer Sinn, eine Möglichkeit ist zum Beispiel, die Reihenfolge des Setzen von den größten Werten herunter auszuführen.
Also in dem Beispiel etwa:int[] dispindices = new int[] { 0, 1, 4, 5, 3, 2 }; int[] reihenfolge = new int[] { 3, 2, 4, 5, 1, 0 }; foreach (int r in reihenfolge) listView1.Columns[r].DisplayIndex = dispindices[r];
ciao Frank- Als Antwort markiert Jan Voges Freitag, 3. Juni 2011 15:28
Alle Antworten
-
Hallo Jan,
das Verhalten ist korrekt so.
Was Du eventuell nicht bedacht hast, ist, dass beim Setzen des DisplayIndex ja die Spalten auch eine andere Reihenfolge bekommen und somit nun DisplayIndexe, die größer sind, um einen kleiner gesetzt werden müssten.Lange Rede kurzer Sinn, eine Möglichkeit ist zum Beispiel, die Reihenfolge des Setzen von den größten Werten herunter auszuführen.
Also in dem Beispiel etwa:int[] dispindices = new int[] { 0, 1, 4, 5, 3, 2 }; int[] reihenfolge = new int[] { 3, 2, 4, 5, 1, 0 }; foreach (int r in reihenfolge) listView1.Columns[r].DisplayIndex = dispindices[r];
ciao Frank- Als Antwort markiert Jan Voges Freitag, 3. Juni 2011 15:28
-
Hallo Frank!
das Verhalten ist korrekt so.
Irgendwie habe ich die sechs Zuweisungen als Einheit aufgefasst, die erst nach der sechsten wirksam wird. Keine Ahnung warum. Klar, jede einzelne Zuweisung ist isoliert zu betrachten, weil sie unmittelbar zu einer Neuordung führt.
Besten Dank
Jan