Hallo zusammen,
ich bin dabei ein Backup Programm zu schreiben. Ich erstelle einen Auftrag in dem ich eine TreeView habe, der wie ein Explorerbaum aufgebaut ist. Dort kann ich die Quellen auswählen indem ich die entsprechenden Verzeichnisse und Dateien checke. In einer 2. TreeView wähle ich dann das Ziel aus. Diese Daten werden mit ein paar anderen Daten (Auftragsname, Ausführungszeitpunkt- und Häufigkeit) in eine XML Datei gespeichert. Also nach dem Motto
<TaskID = 1>
<Source>Ordner 1</Source>
<Source>Ordner 2</Source>
<Destination>Zielordner</Destination>
...
Diese XML lese ich dann in ein ListView ein. Aus dem ich dann mehrere Möglichkeiten haben. Auftrag ausführen, Auftrag löschen und Auftrag bearbeiten. Da liegt mein Problem. Ich möchte beim bearbeiten wieder einen TreeView angezeigt bekommen, in dem der TreeView aufgebaut wird und mit die Quellen checkt. Außerdem sollen auch alle anderen Ordner (überordner) bis zur Quelle angezeigt werden (nicht gecheckt). Ich übergebe die Quellen über einen String z.b "D:\Eigene Bilder\Urlaub|D:\Eigene Bilder\Party|D:\Eigene Musik" (durch pipes getrennt)
Ich habe es schon hinbekommen, dass er mit die ausgewählten Quellen in einen TreeView ausgibt und checkt (siehe Code). Nun möchte ich aber z.b. bei einer Quelle D:\Eigene Bilder\Urlaub alle Ordner und Dateien in D:\ zum TreeView hinzufügt, den Node Eigene Bilder ausklappt, dann mir alle Ordner und Dateien im Node Eigene Bilder anzeigt und den Ordner Urlaub Urlaub checkt. So auch mit den anderen Quellen.
Das ganze muss wohl mit einen Directory.GetDirectories bzw. GetFiles machbar sein. Nur an den stellen wo ich das eingefügt habe (innerhalb der Schleife in der die Quellen ausgelesen werden) werden mir die gesamten Nodes mehrfach hinzugefügt (wenn mehrere Quellen). Ich hab den unten genannten Code aus einem anderen Forum, in dem mir nicht weitergeholfen wurde, da werden Hashtables verwendet, die eigentlich dafür sorgen sollen, dass Nodes nicht doppelt hinzugefügt werden, da ich keine Ahnung von Hashtables habe und den Code nicht ganz blicke, erschwert dies mich ein wenig. Könntet Ihr mit Hilfestellung geben. Vllt eine Alternative von Hashtables. Ich benutze .Net Framework 4.
Hier mein Code. Vielen Dank
private void test(TreeNode parentNode, String NodeSource)
{
//Hashtable erzeugen
Hashtable dictNode = new Hashtable();
//Hier liegen die String in Form "D:\Eigene Bilder\Urlaub|D:\Musik\Internet|D:\Musik\Alben" per | getreent
string[] sources = NodeSource.Split('|');
foreach (string readDir in sources)
{
//Ausgelesene Zeile bei "\" splitten:
string[] splittedPath = readDir.Split('\\');
string strBegin = "";
parentNode = null;
foreach (string pathSplitter in splittedPath)
{
//Wenn das Element leer ist, abbrechen
if (pathSplitter == "")
{
break;
}
//strBegin += "\\" + pathSplitter;
strBegin += pathSplitter+ "\\";
if (dictNode.ContainsKey(strBegin))
{
parentNode = (TreeNode)dictNode[strBegin];
continue;
}
dictNode[strBegin] = new TreeNode(pathSplitter);
if (parentNode == null)
{
this.treeView1.Nodes.Add((TreeNode)dictNode[strBegin]);
}
else
{
//MessageBox.Show(parentNode.FullPath);
parentNode.Nodes.Add((TreeNode)dictNode[strBegin]);
parentNode.Expand();
//Ausgewählten Node checken
if (((TreeNode)dictNode[strBegin]).FullPath == readDir)
{
((TreeNode)dictNode[strBegin]).Checked = true;
}
}
parentNode = (TreeNode)dictNode[strBegin];
}
}
}
|