Laden...

Probleme mit TreeView

Erstellt von Chris06 vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.819 Views
C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren
Probleme mit TreeView

Hallo,

ich habe ein paar Probleme mit dem TreeView Element von MS.

  1. ich lade meinen Tree im Pageload zu Anfang komplett (Muss so sein)
    Nachdem der Tree fertig ist, würde ich gerne bestimmte nodes wieder löschen.
    (Bitte sagt jetzt nicht, dann erstell das Node doch erst gar nicht)

dazu mache ich

 TreeView1.Nodes.Remove(node);
DataBind();

Leider ist danach mein Node immernoch im Tree.
Ich dachte mit dem erneuten binden würde es verschwinden.

Wie bekomme ich das Node weg? (hab schon nach sowas wie TreeView.Reload gesucht...... gibt es aber leider nicht. Das Node hat auch keine childs oder so.

  1. Ein anderer Tree, dieser wird diesmal on demand befüllt. Das laden der Childnotes passiert durch das Event unten.
    Das Problem ist, dass ich nur die childnodes laden kann, wenn ich direkt auf den Node klicke, über das plus zeichen geht das nicht. Durch das plus (expanden) wird der Event zwar geworfen, jedoch ist das gesendete Node leer.

Ich habe aber nichts anderes gefunden, ausser mytree.SelectedNode, um das geklickte node zu bekommen.

protected void mytree_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {
        TreeView mytree = (TreeView)sender;
       
        TreeNode parent = mytree.SelectedNode;
..........

Meine Nodes haben alle: TreeNodeSelectAction.SelectExpand;

Wie kann ich das Problem lösen? Weil es echt blöd ist, wenn nichts passiert bei einem klick auf das pluszeichen.

Hoffe jmd kann mir helfen.
THX
Gruss
Chris06

M
174 Beiträge seit 2006
vor 17 Jahren

zu 1.:
Also ich hab grad das hier ausprobiert:


      private void button1_Click(object sender, System.EventArgs e)
      {
         tcTreeView1.Nodes.Remove( tcTreeView1.SelectedNode );
      }

und es funktioniert einwandfrei, vielleicht liegt der Fehler woanders!

zu2.
Mach das ganze doch mit dem BeforeExpand Event und dann kommst du über e.Node an die Node die geklickt wurde!

Ach und unter GUI-Technologien wäre das Thema besser aufgehoben!

1.130 Beiträge seit 2005
vor 17 Jahren

Original von Muphin
Ach und unter GUI-Technologien wäre das Thema besser aufgehoben!

Nein, laut dem Beitrag von Chris06 geht es hier um das Webforms Treeview Control....

C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren

Original von Muphin
zu2.
Mach das ganze doch mit dem BeforeExpand Event und dann kommst du über e.Node an die Node die geklickt wurde!

Hi,

standardmäßig gibt es das Event nicht im TreeView.
Ich muss erst die assembly system.windows.forms einbinden.
Das habe ich gemacht und den Event hinzugefügt.

Daraufhin bringt er folgenden Fehler:
Fehler 1 TreeView ist ein mehrdeutiger Verweis zwischen System.Web.UI.WebControls.TreeView und System.Windows.Forms.TreeView. H:\My Documents\Visual Studio 2005\WebSites\Masterpage\App_Code\ZusatzTree.cs 71 12 H:...\Masterpage\

Wenn ich vor das TreeView jetzt System.Windows.Forms schreibe kommt der Fehler noch viel häufiger...???

M
174 Beiträge seit 2006
vor 17 Jahren

Ich hatte angenommen du nimmst das TreeView von Forms und nicht das der Webforms deshalb auch das falsches Kommtar am Ende meines letzten Beitrages für das mich .Kai ja netterweiße verbessert hat!
Schmeiß die system.windows.forms wieder raus und schau mal ob du durch die TreeNodeEventArgs nicht auch durch e.Node oder was ähnliches an die Node rankommst bei der du auf das + geklickt hast!

C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren

kann ich nicht irgendwie mein TreeView diesen Event vom System.Windows.Forms Tree erben lassen oder sowas???

C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren

Also Problem 2 ist gelöst.

Nur das löschen geht noch nicht.

 private void Zusatzanzahl(TreeNode parent)
        {
            SortedList list = new SortedList();
            list = getProblemstoCategories(parent);
            string anz = list.Count.ToString();
            parent.Text += " (" + anz + ")";
            if (parent.ChildNodes.Count > 0)
            {
               foreach (TreeNode child in parent.ChildNodes)
               {
                   Zusatzanzahl(child);
               }
            }
            if (anz == "0")
            {
                TreeView1.Nodes.Remove(parent);
                DataBind();
            }
        }
        

ich übergebe der Funktiion beim start einen Ast meines Tree´s.
Dort wird für jeden knoten gezählt, wieviel Zuordnungen zu dem Knoten bestehen.
Wenn diese 0 sind, soll der Knoten entfernt werden.
Wäre es möglich, dass der TreeNode den ich dort lösche, nur eine übergebene kopie des Nodes ist?

T
243 Beiträge seit 2006
vor 17 Jahren

Lass doch einfach mal das DataBind() weg...

C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren

Original von typhos
Lass doch einfach mal das DataBind() weg...

Macht keinen Unterschied.....

M
174 Beiträge seit 2006
vor 17 Jahren

Versehe die Funktionsparamter doch mal mit nem "ref" wenns dann funktioniert wars wohl nur ne Kopie!

C
Chris06 Themenstarter:in
130 Beiträge seit 2006
vor 17 Jahren

Also der Aufruf

 Zusatzanzahl(ref node);

bringt nen Fehler.
Meinstest du an dieser Stelle? ansonsten hab ich nichts geändert.