Zugriff auf einen bestimmten Node in einer Tree View?

totherock

Grünschnabel
Hallo,
kann mir jemand sagen, ob es eine einfache Möglichkeit gibt, auf einen bestimmten Node in einer TreeView zuzugreifen?

Also: Ich lese eine XML-Datei ein, und stelle diese in einer TreeView dar. Dann möchte ich über TextBoxes die Bezeichnung verschiedener Knoten ändern können, und danach schreibe ich den Tree wieder in eine XML-Datei.

Bis jetzt habe ich es so realisiert, dass ich immer von Knoten zu Knoten springe, etwa so:

treeView1.TopNode.FirstNode.NextNode.NextNode.Text=this.textBox1.Text;
treeView1.TopNode.FirstNode.FirstNode.Text=this.textBox2.Text;

Aber das ist ja ein Riesenaufwand, wenn man einige Nodes zu editieren hat.

Kann man etwa über den FullPath zugreifen oder so?

Wäre sehr dankbar über ein Stückchen Code.

Danke!
ts
 
Du kannst XPath verwenen. Ich hatte gestern etwas gepostet, da ich ein Problem hatte und daher auch ein bisserl Source dabei:

http://www.tutorials.de/tutorials155946.html

Source ist fehlerfrei, ich hatte lediglich auf den XML-Namespace vergessen, damit XPath-Abfragen funktionieren. Schau Dir das mal an, ist vermutlich angenehmer, da Du bestimmte Bereiche zurückbekommst.

Im Internet solltest Du auch genug Anleitungen zu XPath finden, ist auch nicht besonders schwierig.

Sonst gibt es noch die Möglichkeit der Methode "GetElementByTagName(string TagName). Damit bekommst ein Element zurückgeliefert bzw. einen ganzen Node inkl. SubNodes.

Hoffe, das hilft Dir weiter. In der MSDN gibt es ein paar schöne Bespiele dazu, bzw. auf CodeProject auch.
 
Ich glaube therock meinte eher sowas:

Code:
myTree.Nodes[1].Nodes[3].Text = "Ast"

Das weist der Text Eigenschaf des 4.SubNodes vom 2.Node des Stammes einen Text zu :)

Wie ein Array. Da muss man nicht mit NextNode immer Schritt für Schritt nach vorne.
 
Ah ja stimmt *lol*

Da ich mich seit 2 Wochen ausschließlich mit XML rumschlag, dacht ich jetzt er braucht was zum Thema XML, da ja so schön NODE gestanden ist ... *auf den Kopf greif*

*geht schlafen*
 
Ja, das mit den Indizes ist aber ähnlich mühsam.
Wenn ich in der View Knoten lösche oder auch hinzufüge, dann passt ja nix mehr.
Darum gehts mir ja eigentlich.

Oder denkt ihr es sei geschickter gleich die XML-Datei zu ändern über XPath oder so.
Aber wie bleibt dann mein View aktuell?


__________
ts
 
Ich häng am selben Problem.
Da bleibt einem fast nichts mehr übrig, als alle Nodes (sofern möglich) durch zu iterieren. Wenn man dann in Nirvana angekommen ist, kann man seinen Node ändern. Doch das lohnt sich nur für den kleinen Rahmen. Gibt es dafür denn keinen sinnvollen Befehl (der in der MSDN irgendwie überlesen wird) ?


MFG JJB
 
Zuletzt bearbeitet:
Nein, gibt es nicht.

Was du allerdings machen kannst: TreeView ableiten und um einen Index ergänzen (zB Hashtable hinzufügen, etc.).

Viel Spaß dabei :)
 
Ich versuch grad euer Problem nachzuvollziehen. Was mein ihr jetzt?
Wenn sich der TreeView andert soll sich die XML-Datei gleich mitverändert oder wie?

Ist diese Art zu iterieren etwa zu aufwendig?
Code:
foreach ( TreeNode RootNode in tvwProfil.Nodes )
	foreach ( TreeNode PriNode in RootNode.Nodes )
		foreach ( TreeNode SecNode in PriNode.Nodes )
			if ( SecNode.Text == "Text der gesuchten Node" ){
				MachWasMit(SecNode);
			return;
			}
Reicht es nicht aus wenn man sich eine rekursive Methode schreibt die sucht.
Und zwei weitere die Werte hinzufügen und entfernen. Und natürlich gleichzeitig das XML aktualisieren.

Oder bin ich etwa :offtopic: und hab es nicht verstanden.
 
Ähm ... viel zu aufwendig.

Wenn du auf eine TreeNode klickst, dann schreib das Objekt einfach in ein globales TreeNode-Objekt, les es aus und den Value gibst dann in deine TextBox. Nach der Änderung schreibst das wieder in dein globales TreeNode und hast es dann auch gleich in der TreeView drinnen.

Und irgendwann speicherst das Teil halt dann als Xml.
 

Neue Beiträge

Zurück