AnswerBun.com

TreeView com Nodes & Childs através de base de dados SQL

Stack Overflow em Português Asked by Diogo Costa on September 26, 2021

Gostaria de saber como posso popular uma TreeView com Nodes e Childs através de uma conexão de SQL. A conexão já está feita este é o código que tenho para já, mas não funciona pois adiciona apenas uma node que é a primeira da lista.

n01 – ParentNode
n02 – ChildNode

foreach (DataRow dr in tb.Rows)
{
    if (treeView_menus.Nodes.Count > 0)
    {
        if (treeView_menus.TopNode.Tag == dr.ItemArray[1])
        {
            TreeNode node = new TreeNode();
            node.Tag = dr["Id02"];
            node.Text = dr["n02"].ToString();

            treeView_menus.Nodes[dr["n01"].ToString()].Nodes.Add(node);
        }

    }
    else
    {
        TreeNode node = new TreeNode();
        node.Tag = dr["Id01"];
        node.Text = dr["n01"].ToString();
        treeView_menus.Nodes.Add(node);
    }

}

One Answer

Eu fiz esse método que uso há alguns anos, e até por isso ainda utilizava um DataTable como entrada dos dados, se fosse fazer novamente, utilizaria uma List de um objeto. Seria mais fácil.

Você pode aproveitar a lógica de preencher a treeview, mas recomendo não utilizar DataTable e adequar para uma lista tipada.

public static void PreencherMenu(DataTable dtMenu, TreeView tree)
{
    if (tree != null)
    {    
        tree.Nodes.Clear();

        dtMenu.DefaultView.Sort = "nivel, ordem";
        dtMenu = dtMenu.DefaultView.ToTable();

        foreach (DataRow r in dtMenu.Rows)
        {
            string nome = r["nome"].ToString();
            string pai = r["pai"].ToString();

            TreeNode t = new TreeNode(r["texto"].ToString());
            t.ImageKey = r["img"].ToString();
            t.SelectedImageKey = r["simg"].ToString();
            t.Name = r["nome"].ToString();
            t.Text = r["texto"].ToString();
            t.Tag = String.IsNullOrEmpty(r["tag"].ToString()) ? null : r["tag"].ToString();

            if (String.IsNullOrEmpty(pai))
            {
                tree.Nodes.Add(t);
            }
            else
            {
                TreeNode[] parent = tree.Nodes.Find(pai, true);
                if (parent.Length != 0)
                {
                    parent[0].Nodes.Add(t);
                }
            }

        }
    }
}

A tabela de entrada, deve ter o seguinte formato:

DataTable dt = new DataTable();

dt.Columns.Add("texto"); //Texto de Exibição do item
dt.Columns.Add("nome");  //Nome do item (chave) deve ser único
dt.Columns.Add("pai");   //Nome do item pai do item atual, se não houver um pai, informar null
dt.Columns.Add("img");   //Index de uma imagem a ser usada em um imagelist associado ao controle
dt.Columns.Add("simg");  //Index de uma imagem a ser usada em um imagelist associado ao controle (quando o item for selecionado)
dt.Columns.Add("tag");   //Tag associada ao item
dt.Columns.Add("nivel", typeof(Int32));//Nivel do item (0 = Raiz)
dt.Columns.Add("ordem", typeof(Int32));//Ordem que o item deve aparecer

dt.PrimaryKey = new DataColumn[] { dt.Columns["nome"] };

Exemplo de um menu Cadastro:

dt.Rows.Add(new object[] { "Cadastros", "cadastros", null, "Folder-Close.png", "Folder-Open.png", null, 0, 1 });

dt.Rows.Add(new object[] { "Pessoas / Convênios", "pessoas", "cadastros", "Clients-icon.png", "Clients-icon.png", null, 1, 1 });

Answered by Rovann Linhalis on September 26, 2021

Add your own answers!

Related Questions

Web View com zoom

1  Asked on September 8, 2020 by joel-messias-do-nascimento

       

Selecionar uma div sem ela ter uma class ou um id?

3  Asked on September 7, 2020 by i_like_trains

 

Equivalente de “Date.now();” do Javascript em C#?

4  Asked on September 5, 2020 by matheus-miranda

         

EventListener em um link a

0  Asked on September 5, 2020 by user190650

       

Soma de duas tabelas diferentes msql php

1  Asked on September 4, 2020 by renato

   

Erro ao executar projeto Angular

1  Asked on September 3, 2020 by diego-estacho

       

Erro em cadastro.php com mysql (etapa final) “INSERT”

2  Asked on August 25, 2020 by user196053

       

Retornar duas funções em um evento onclick JS

1  Asked on August 24, 2020 by anderson-leandro

       

Erro no incremento de array com foreach mais HTML

0  Asked on August 21, 2020 by wesley-souza

       

Listagem de um array dentro de um JSON angular

1  Asked on August 20, 2020 by joao-vitor-franco

     

Switch Case – Break e Return dentro de uma Função – Arduino

0  Asked on August 15, 2020 by lucio-carlos-resende

       

Ask a Question

Get help from others!

© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP