Ich bin weitergekommen. Das waren die richtigen Denkanstöße, danke Th69. Allerdings bin ich jetzt wieder hängen geblieben...
Das hier ist die Methode die Elemente des Treeviews nach drücken eines Buttons dem ListView hinzufügt:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| private void button_add_Click(object sender, EventArgs e) { ListViewItem.ListViewSubItem[] subItems; ListViewGroup listviewgroup1 = new ListViewGroup(); ListViewItem item = null; int index = 0;
if (tree_struct.SelectedNode.Tag != null) { FileInfo file = new FileInfo(tree_struct.SelectedNode.Tag.ToString() + tree_struct.SelectedNode.Text);
string path = "C:\\Eigene Dateien\\Test"; int size = new DirectoryInfo(path).GetDirectories().Length; ListViewGroup[] groups = new ListViewGroup[size]; for (int i = 0; i < size; i++) { groups[i] = new ListViewGroup(); groups[i].Header = new DirectoryInfo(path).GetDirectories()[i].Name; }
item = new ListViewItem(file.Name, 1); subItems = new ListViewItem.ListViewSubItem[] { new ListViewItem.ListViewSubItem(item, file.Directory.Parent.Name), new ListViewItem.ListViewSubItem(item, file.Directory.Name), new ListViewItem.ListViewSubItem(item, file.LastAccessTime.ToShortDateString()), new ListViewItem.ListViewSubItem(item, file.DirectoryName)}; item.SubItems.AddRange(subItems);
while (index < size) { if (file.Directory.Parent.Name == groups[index].Header) { list_select.Groups.Add(groups[index]); ListViewItem item1 = list_select.Items.Add(item); groups[index].Items.Add(item1);
break; } else index++; } } else MessageBox.Show("Selektierter Node ist keine Datei\n--> kann also nicht ausgewählt werden"); } |
Und zwar instanziere ich So viele Gruppen wie Unterornder in meinem Pfad sind und benenne die Gruppen wie die Unterordner (for-Schleife Zeile 16-20=. Habe ich einfach ein "harten" Pfad eingegeben. In meinem Programm kommt der aus einer anderen Methode.
Die entsprechenden Dateien sind im TreeView enthalten in dem der gleiche "harte" Pfad das Root Verzeichnis darstellt.
Wenn ich nun einzelne Dateien dem ListView hinzufüge, werden diese zwar in ihre jeweilige Gruppe hinzugefügt. (So ist es ja auch programmiert)
Aber falls ich eine Datei aus einem unterordner hinzufüge der bereits eine Gruppe hat, wird die Datei nicht in dieser Gruppe angezeigt. (was auch klar ist, weil nicht programmiert

)
Kann mir jemand den Denkanstoß geben, wie ich es hinbekomme, das ich ie Gruppen erstelle und dann die Dateien der Unterordner in de jeweiligen Gruppen "sortiere"?
Die LisView soll also dynamisch mit Gruppen aufgebaut werden....
Edit sagt: Okay, es gibt kleine Fortschritte... Hatte nochmal ne Idee mit meiner ListView, leider funktioniert auch diese nicht wie gewünscht. Es werden auch immer neue Gruppen für jedes einzelne Element erzeugt. Woran das liegt kanni ch mir auch vorstellen. Ich überschreibewohl jedes mal mein Item.
Die Gruppen füge ich nun direkt nach dem erzeugen per AddRange hinzzu, also nochmal der Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| for (int i = 0; i < size; i++) { groups[i] = new ListViewGroup(); groups[i].Header = new DirectoryInfo(path).GetDirectories()[i].Name; } list_select.Groups.AddRange(groups);
...
while (index < size) { if ((list_select.Groups.Contains(groups[index])) && (file.Directory.Parent.Name == groups[index].Header)) { ListViewItem item1 = new ListViewItem(); item1 = list_select.Items.Add(item); groups[index].Items.Add(item1); break; } else index++; } |
ist schon besser aber nciht wie gewollt.... :-/
Gruß
Markus