none
Llenar un Tree View en Visual Studio RRS feed

  • Pregunta

  • Hola a tod@, quisiera que me ayuden con lo siguiente: Tengo una consulta en sql server la cual quisiera pasar la información a un tree view de la siguiente manera

    1) que mi nodo principal sean los cliente 

    2) los números de factura de ese cliente sean el nodo hijo

    ejemplo:

    Jose David

                 4521888

                 4548888

    Ricardo Juares

                 4854555

                  7845888

                  84857965 etc...

    mi tabla es la siguiente:

    si se fijan los clientes se pueden repetir así que en el tree view solo quiero que aparezca solo una vez y las facturas las que tengas 

    este es el código que tengo hasta ahora:

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
            Try
    
                Me.TreeView1.Nodes.Clear()
    
                Using cnn As New SqlConnection(My.Settings.AlmacenGlovalConnectionString)
                    cnn.Open()
                    Dim cmd As New SqlCommand("SELECT * FROM DBO.Llenar_Tree_View", cnn)
                    cmd.CommandType = CommandType.Text
                    Dim dr As SqlDataReader = cmd.ExecuteReader()
                    While dr.Read()
                        Dim NODE As TreeNode = New TreeNode(dr("Cliente").ToString())
                        NODE.Nodes.Add(dr("Factura").ToString())
                        Me.TreeView1.Nodes.Add(NODE)
    
                    End While
    
                End Using
    
    
            Catch ex As Exception
                FormMsgBoxError.Show(ex.Message, "Se produjo un error.")
            End Try
        End Sub

    Y este es el resultado:

    A como pueden ver no he podido agrupar los números de factura a un solo cliente, claro las que les corresponde, 

    cualquier ayuda les agradecería ...

    Muchas Gracias de antemanos.

    martes, 30 de julio de 2019 17:27

Respuestas

  • Hola:

    Fijate que cada vez que lees un registro, haces un New TreeNode("cliente"), lo que tienes que hacer es comprobar si existe el NODE del Cliente y actuar en consecuencia:

    While dr.Read()
       Dim NODE As TreeNode '= New TreeNode(dr("Cliente").ToString())
       Dim IDCliente = "Cliente" ' Pon aquí el campo que es la ID de CLIENTE
    
    ' En vez de CREAR siempre el NODO, comprobamos si existe
       If TreView1.Nodes.ContainsKey(dr(IDCliente).ToString()) Then
          ' Si existe, lo usamos.
          NODE = TreeView1.Nodes(dr(IDCliente).ToString())
       Else
          ' Si no existe, lo creamos y lo añadimos.
          NODE = New TreeNode(dr("Cliente").ToString())
          ' Importante, la 'key' es la propiedad .Name
          NODE.Name = dr(IDCliente).ToString()
          TreeView1.Nodes.Add(NODE)
       End If
    
       ' Ya sea nuevo o existente, añadimos la factura.
       NODE.Nodes.Add(dr("Factura").ToString())
    
    End While

    Espero que te sirva

    Un saludo



    • Editado LG DES miércoles, 31 de julio de 2019 6:26
    • Marcado como respuesta Reynaldo Sanchez miércoles, 31 de julio de 2019 15:49
    miércoles, 31 de julio de 2019 6:13

Todas las respuestas

  • Hola:

    Fijate que cada vez que lees un registro, haces un New TreeNode("cliente"), lo que tienes que hacer es comprobar si existe el NODE del Cliente y actuar en consecuencia:

    While dr.Read()
       Dim NODE As TreeNode '= New TreeNode(dr("Cliente").ToString())
       Dim IDCliente = "Cliente" ' Pon aquí el campo que es la ID de CLIENTE
    
    ' En vez de CREAR siempre el NODO, comprobamos si existe
       If TreView1.Nodes.ContainsKey(dr(IDCliente).ToString()) Then
          ' Si existe, lo usamos.
          NODE = TreeView1.Nodes(dr(IDCliente).ToString())
       Else
          ' Si no existe, lo creamos y lo añadimos.
          NODE = New TreeNode(dr("Cliente").ToString())
          ' Importante, la 'key' es la propiedad .Name
          NODE.Name = dr(IDCliente).ToString()
          TreeView1.Nodes.Add(NODE)
       End If
    
       ' Ya sea nuevo o existente, añadimos la factura.
       NODE.Nodes.Add(dr("Factura").ToString())
    
    End While

    Espero que te sirva

    Un saludo



    • Editado LG DES miércoles, 31 de julio de 2019 6:26
    • Marcado como respuesta Reynaldo Sanchez miércoles, 31 de julio de 2019 15:49
    miércoles, 31 de julio de 2019 6:13
  • Hola LG DES, muchas gracias por tu aporte me servio de mucho......

    Gracias,

    Resultado:

    miércoles, 31 de julio de 2019 15:50