Discussion:
Treeview Sortieren
(zu alt für eine Antwort)
Stefan Moldenhauer
2003-07-05 19:32:15 UTC
Permalink
Hallo
kann man dem Treeview sagen dass er nicht den ganzen Baum alphabetisch
sortieren soll, sondern nur einen bestimmten TreeNode ?
Ja, aber anders als du es dir vielleicht vorstellst ... :-).
TreeNodeCollection, also die Collection der Nodes, implementiert das
Interface IList, weshalb es möglich ist, einen ArrayList-Wrapper5 zu
verwenden und über die ArrayList zu sortieren. Deine Sortiermethode musst
du
in Form einer Klasse, die IComparer verwendet, definieren ... z.B.
[Beispiel in C#]
Jetzt musst du nur noch die TreeNodeCollection übergeben, die du sortieren
willst :-)
ich hab das gleiche Problem und hab das Beispiel mit Interesse ausprobiert
(allerdings in VB.NET). Wenn ich nun die Collection übergeben vermehren sich
die Einträge auf wundersame Art und Weise. Kann ich das nur durch Löschen
des zu sortierenden Knotens, dann sortieren und dann wieder Einfügen des
Knotens erreichen??? Oder hab ich was übersehen ... *grübel*

MfG
Stefan Moldenhauer
Frank Eller [MVP]
2003-07-05 23:16:14 UTC
Permalink
Hallo Stefan,
Post by Stefan Moldenhauer
kann man dem Treeview sagen dass er nicht den ganzen Baum alphabetisch
sortieren soll, sondern nur einen bestimmten TreeNode ?
[...]
Post by Stefan Moldenhauer
ich hab das gleiche Problem und hab das Beispiel mit Interesse ausprobiert
(allerdings in VB.NET). Wenn ich nun die Collection übergeben vermehren sich
die Einträge auf wundersame Art und Weise. Kann ich das nur durch Löschen
des zu sortierenden Knotens, dann sortieren und dann wieder Einfügen des
Knotens erreichen??? Oder hab ich was übersehen ... *grübel*
Hast du nicht, aber ich (ich glaube, das andere Posting war von mir). Das
TreeView enthält eine doppelt verkettete Liste, dadurch sind die vorherigen
Referenzen noch vorhanden (und die Einträge werden dupliziert). Es geht aber
über eine eigene Sortierroutine:

private void SortNodes(TreeNodeCollection nodes)
{
for (int i = 0; i < nodes.Count; i++)
{
for (int j = i + 1; j < nodes.Count; j++)
{
if (String.Compare(nodes[i].Text, nodes[j].Text, true) > 0)
{
// Tauschen
TreeNode node1 = nodes[i];
TreeNode node2 = nodes[j];
nodes.RemoveAt(i);
nodes.RemoveAt(j-1);
nodes.Insert(i, node2);
nodes.Insert(j, node1);
}
}
}
}

Wird bei vielen Einträgen allerdings ziemlich langsam ...

Viele GRüße,

--
Frank Eller [.NET MVP] (back from TechEd)
www.frankeller.de
.NET Developers Group München - www.munichdot.net
[Antworten bitte nur in die Newsgroup]

Loading...