Ciao !
sulla falsa riga del codice che mi hai postato, ho inserito questo leggendo da database;
in pratica funziona ma mi mette solo i nodi padri, riesci a capire dove sta il problema ? eppure sembra tutto a posto perchè nel campo figlio messo solo ai fini della prova, viene valorizzato correttamente.
il codice padre è identificato a zero e sono in ordine (padre,figlio, figlio, padre ecc..)

Grazie

codice:
while(ind < MyData.Rows.Count){
                    // se ho trovato il padre inserisco il nodo Padre
                if ((int)MyData.Rows[ind]["id_padre"] == 0)
                {
                    Padre = (string)MyData.Rows[ind]["Nome"];
                    TreeNode nodoPadre = new TreeNode((string)MyData.Rows[ind]["Nome"]);
                    TreeView1.Nodes.Add(nodoPadre);
                }
                else 
                {
                    // Ho trovato il figlio
                    Figlio = (string)MyData.Rows[ind]["Nome"];
                    TreeNode nodoPadre = new TreeNode((string)Padre);
                    TreeNode nodoFiglio = new TreeNode((string)MyData.Rows[ind]["Nome"]);
                    nodoPadre.ChildNodes.Add(nodoFiglio);

                }
                ind++;
            }