FreeTime - Stefano Passatordi 's Blog


Libera la mente...ecco il Blog di Stefano Passatordi
Statistiche
  • Views Home Page: 135.385
  • Views Posts: 316.469
  • Views Gallerie: 490.992
  • n° Posts: 210
  • n° Commenti: 148
Archivio Posts
Anno 2010

Anno 2009

Anno 2008

Anno 2007

Anno 2006

Anno 2005
Mappa

Riempire un TreeView da codice

Quasi sempre un controllo TreeView viene popolato in maniera dinamica, con i nodi che vengono creati e modificati al "volo". In genere i nodi appartengono a collection di oggetti che rappresentano il singolo nodo con le relative relazioni padre-figlio. Sfruttando queste collection e le relazioni tra nodo padre e nodo figlio, ecco come popolare da codice un controllo TreeView :

            Nodo root = new Nodo("Lettere e Nomi"); // Per la definizione della classe Nodo si legga qui
            int targetNodeCounter = 0;

             //Codice di esempio per creare dei nodi e delle relazioni dimostrative
            Nodo a = new Nodo("A");
            Nodo alessandro = new Nodo("Alessandro");
            Nodo armando = new Nodo("Armando");
            Nodo amilcare = new Nodo("Amilcare");

            a.AddChild(alessandro);
            alessandro.AddParent(a);
            a.AddChild(armando);
            armando.AddParent(a);
            a.AddChild(amilcare);
            amilcare.AddParent(a);
           
            Nodo b = new Nodo("B");
            Nodo biagio = new Nodo("Biagio");
            Nodo betty = new Nodo("Betty");
           
            b.AddChild(biagio);
            b.AddChild(betty);
           

            Nodo c = new Nodo("C");
            Nodo carlo = new Nodo("Carlo");
            Nodo carmela = new Nodo("Carmela");           

            c.AddChild(carlo);
            c.AddChild(carmela);


            root.AddChild(a);
            root.AddChild(b);
            root.AddChild(c);
           //Fine creazioni relazioni

            targetNodeCounter = 0;
            Print(treeView1, root); // Richiamando il metodo Print si avvia il processo iterativo che ciclia la collection root e visita tutto l'albero creando ogni volta i nodi nel TreeView

            treeView1.ExpandAll();

 private void Print(TreeView tree, Nodo root)
        {
            tree.Nodes.Add(new TreeNode(root.Text));

            TreeNode tNode = new TreeNode();
            if (targetNodeCounter == 0)
            {
                tNode = tree.Nodes[0];
                targetNodeCounter++;
            }
            else
            {
                tNode = tree.Nodes[targetNodeCounter];
                targetNodeCounter++;
            }

            AddNode(root, tNode);

        }

        private void AddNode(Nodo nodo, TreeNode inTreeNode)
        {
            Nodo xNode;
            TreeNode tNode;

            int i;

            if (nodo.Children.Count > 0)
            {

                for (i = 0; i <= nodo.Children.Count - 1; i++)
                {
                    xNode = nodo.Children[i];
                    inTreeNode.Nodes.Add(new TreeNode(xNode.Text));
                    tNode = inTreeNode.Nodes[i];
                    AddNode(xNode, tNode);
                }
            }
          
        }

Notare che utilizzando targetNodeCounter per indicare l'indice della radice è possibile creare più elementi root!Se avessimo un root_1 ed un root_2, si avrebbe :
            targetNodeCounter = 0;
            Print(treeView1, root_1);
            Print(treeView1, root_2);

Enjoy!
Categoria: Programmazione
giovedì, 13 set 2007 Ore. 11.28
Ora e Data
Calendario
ottobre 2017
lmmgvsd
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
Blogs Amici
    Links
      Copyright © 2002-2007 - Blogs 2.0
      dotNetHell.it | Home Page Blogs
      ASP.NET 2.0 Windows 2003