Llenar treeView con datatable



Aqui le muestro el codigo para llenar un treeview

private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID");
            dt.Columns.Add("NOMBRE");
            dt.Columns.Add("PADRE");
            DataRow dr;
            dr = dt.NewRow();
            dr["ID"] = "1";
            dr["NOMBRE"] = "SISTEMAS";
            dr["PADRE"] = "0";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "2";
            dr["NOMBRE"] = "DESARROLLO";
            dr["PADRE"] = "1";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "3";
            dr["NOMBRE"] = "SOPORTE TECNICO";
            dr["PADRE"] = "1";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "4";
            dr["NOMBRE"] = "CONTABILIDAD";
            dr["PADRE"] = "0";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "5";
            dr["NOMBRE"] = "COBRANZAS";
            dr["PADRE"] = "4";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "6";
            dr["NOMBRE"] = "FACTURACION";
            dr["PADRE"] = "4";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "7";
            dr["NOMBRE"] = "GERENCIA";
            dr["PADRE"] = "0";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "8";
            dr["NOMBRE"] = "PRESIDENCIA";
            dr["PADRE"] = "7";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "9";
            dr["NOMBRE"] = "GERENCIA";
            dr["PADRE"] = "7";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "10";
            dr["NOMBRE"] = "SECRETARIA GENERAL";
            dr["PADRE"] = "7";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "11";
            dr["NOMBRE"] = "PRODUCCION";
            dr["PADRE"] = "0";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "12";
            dr["NOMBRE"] = "MATERIA PRIMA";
            dr["PADRE"] = "11";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "13";
            dr["NOMBRE"] = "ENSAMBLADO";
            dr["PADRE"] = "12";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "14";
            dr["NOMBRE"] = "CONEXIONES";
            dr["PADRE"] = "13";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = "15";
            dr["NOMBRE"] = "CALIDAD";
            dr["PADRE"] = "0";
            dt.Rows.Add(dr);
            AddNodes(dt);
            dataGridView1.DataSource = dt;
        }
        private void AddNodes(DataTable dt)
        {
            TreeNode padre;
            TreeNode hijo;
            try
            {
                for (int i = 0; i < dt.Rows.Count ; i++)
                {
                    hijo= new TreeNode();
                    hijo.Text=dt.Rows[i]["NOMBRE"].ToString();
                    hijo.Tag=dt.Rows[i]["ID"].ToString();
                    hijo.ToolTipText=dt.Rows[i]["PADRE"].ToString();
                    padre = FindParent(dt.Rows[i]["PADRE"].ToString(),treeView1.Nodes);
                    if (padre == null)
                    {
                        this.treeView1.Nodes.Add(hijo);
                    }
                    else
                    {
                        padre.Nodes.Add(hijo);
                    }
                    padre = null;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
        private TreeNode FindParent(String NodoBusqueda, TreeNodeCollection nodos)
        {
            TreeNode padre = null;
            bool encontrado = false;
            int contador = 0;
           
            while (encontrado == false && contador < nodos.Count)
            {
                if (nodos[contador].Tag == NodoBusqueda)
                {
                        encontrado = true;
                        padre = nodos[contador];
                }
                else
                {
                    if (nodos[contador].Nodes.Count>0)
                    {
                        padre=FindParent(NodoBusqueda,nodos[contador].Nodes);
                        if (padre!=null)
                        {
                            encontrado=true;
                        }
                    }
                }
                contador++;
            }
            return padre;
        }

 Descargar



 

Comentarios