Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Didiron

[Resolvido] Como pegar o id de um ítem da treeview em C#?

Recommended Posts

Boa Noite Pessoal.

 

Tenho atualmente uma treeview, na qual os "links" vem do banco de dados SQL Server. Tenho categorias e sub categorias, na qual eu listo elas no treeview com o seguinte código:

 

connection.Open();
           SqlCommand cmd = new SqlCommand("SELECT * FROM Categorias", connection);

           DataTable dtProdutos = new DataTable();
           TreeNode treeNode;

           var dr = cmd.ExecuteReader();

           while (dr.Read())
           {
               //subcategorias
               SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Produto where id_Categoria = " + dr["id"].ToString(), connection);
               da.Fill(dtProdutos);

               if (dtProdutos.Rows.Count > 0)
               {
                   int Indice = dtProdutos.Rows.Count;
                   int i = 0;

                   //cria um array para os produtos
                   TreeNode[] array = new TreeNode[indice];
                   foreach (DataRow row in dtProdutos.Rows)
                   {
                       array[i] = new TreeNode(row["nome"].ToString());
                       i++;
                   }

                   treeNode = new TreeNode(dr["nome"].ToString(), array);
                   dtProdutos.Rows.Clear();
               }
               else
               {
                   treeNode = new TreeNode(dr["nome"].ToString());
               }
               //adiciona
               treeView1.Nodes.Add(treeNode);

           }
           connection.Close();

 

Mas, na forma em que está quando eu clico em um link, nada acontece, de que forma posso pegar o id da sub-categoria que eu selecionei?

Agradeço muito.

ABraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No evento que você utilizou para o link, acredito ser o click ou então o double click, fica a seu critério, tente jogar para uma variável assim:

 

int selectedID = treeView1.SelectedNode.Index

 

Assim você pegaria o ID do Node selecionado. Caso você deseje pegar o nome e buscar no DB:

 

String SelectedName = treeView1.SelectedNode.Name

 

A propriedade

 

treeView1.SelectedNode

 

Tem diversas funções é só buscar o que está a procura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por ajudar KhaosDoctor, mas eu vi que você sugeriu pegar o index do node selecionado, mas em nenhum lugar no meu código eu atribui o id do banco em um indice da treeview, de que forma que eu faço isso?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem pessoal.

 

Consegui resolver o problema da seguinte forma.

array[i].Tag = row["ProductID"].ToString();

 

E depois para recuperar esse id é utilizando o evento NodeMouseClick.

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{            
           if (e.Node.Tag != null)
               MessageBox.Show(e.Node.Tag.ToString());
}

 

Obrigado a sua ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns pela solução Didiron, muito inteligente, jogar um valor direto a uma variável puxada do BD para melhor busca.

 

Quanto a minha sugestão acima, eu não sabia que você necessitava exclusivamente do numero que somente o banco de dados provinha, senão iria sugerir a mesma coisa da solução. Pensei que você precisasse primeiro do nodo selecionado e depois buscasse ele no banco de dados, assim você teria um controle de qual nodo foi clicado ou selecionado e poderia fazer uma busca específica.

 

 

Mas parabéns :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.