FreeTime - Stefano Passatordi 's Blog


Libera la mente...ecco il Blog di Stefano Passatordi
Statistiche
  • Views Home Page: 136.045
  • Views Posts: 318.154
  • Views Gallerie: 503.252
  • 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
dicembre 2017
lmmgvsd
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
Blogs Amici
    Links
      Copyright © 2002-2007 - Blogs 2.0
      dotNetHell.it | Home Page Blogs
      ASP.NET 2.0 Windows 2003