none
[VB.NET] Construir un Treeview RRS feed

  • Pregunta

  • Buenas, tengo un Listview asi:

    Dpto                Cargo

    VENTAS                    VENDEDOR

    PRODUCCION            AYUDANTE      

    PRODUCCION            OPERADOR

    MANTENIMIENTO        MECANICO

    necesito construir un Treeview, donde me tome los departamentos y todos sus cargos asi:

    Dpto

    PRODUCCION

    AYUDANTE

    OPERADOR

    VENTAS

    VENDEDOR

    MANTENIMIENTO

    MECANICO

    Estoy utilizando este codigo para construirlo pero no lo arma como deseo, ayuda porfavor

    For Each item As ListViewItem In ListView1.Items
                Try
    
                    TreeView1.Nodes(0).Nodes.Add(item.Text).Nodes.Add(item.SubItems(1).Text)
    
    
                Catch ex As Exception
    
                End Try
            Next


                   

    domingo, 8 de noviembre de 2015 15:28

Respuestas

  • Public Class Form1
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            ListView1.View = View.Details
            ListView1.Columns.Add("Dpto")
            ListView1.Columns.Add("Cargo")
    
            ListView1.Items.Add("VENTAS").SubItems.Add("VENDEDOR")
            ListView1.Items.Add("PRODUCCION").SubItems.Add("AYUDANTE")
            ListView1.Items.Add("PRODUCCION").SubItems.Add("OPERADOR")
            ListView1.Items.Add("MANTENIMIENTO").SubItems.Add("MECANICO")
    
            For Each g As IGrouping(Of String, ListViewItem) In ListView1.Items.Cast(Of ListViewItem).GroupBy(Function(lvi) lvi.Text)
                Dim tn As TreeNode = TreeView1.Nodes.Add(g.Key)
    
                For Each item As ListViewItem In g
                    tn.Nodes.Add(item.SubItems(1).Text)
                Next
            Next
    
        End Sub
    End Class
    

    • Marcado como respuesta _FOXLive domingo, 8 de noviembre de 2015 19:45
    domingo, 8 de noviembre de 2015 18:13

Todas las respuestas

  • Public Class Form1
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            ListView1.View = View.Details
            ListView1.Columns.Add("Dpto")
            ListView1.Columns.Add("Cargo")
    
            ListView1.Items.Add("VENTAS").SubItems.Add("VENDEDOR")
            ListView1.Items.Add("PRODUCCION").SubItems.Add("AYUDANTE")
            ListView1.Items.Add("PRODUCCION").SubItems.Add("OPERADOR")
            ListView1.Items.Add("MANTENIMIENTO").SubItems.Add("MECANICO")
    
            For Each g As IGrouping(Of String, ListViewItem) In ListView1.Items.Cast(Of ListViewItem).GroupBy(Function(lvi) lvi.Text)
                Dim tn As TreeNode = TreeView1.Nodes.Add(g.Key)
    
                For Each item As ListViewItem In g
                    tn.Nodes.Add(item.SubItems(1).Text)
                Next
            Next
    
        End Sub
    End Class
    

    • Marcado como respuesta _FOXLive domingo, 8 de noviembre de 2015 19:45
    domingo, 8 de noviembre de 2015 18:13
  • excelente! maestro, funciona perfecto me podrias ayudar a eliminar los cargos duplicados, me explico

    la tabla real es mas o menos asi

    nombre  apellido   departamento   cargo  

    name1  lastname1   dpto1         cargo11

    name2  lastname2   dpto1         cargo11

    name3  lastname3   dpto2         cargo21

    es decir asi como se repiten los departamentos tambien se repiten algunos cargos por departamento, me ayudas a evitar los cargos repetidos por departamento porfavor

    la salida me queda asi:

    departamento

    dpto1

    cargo11

    cargo11

    cargo12

    dpto2

    cargo21

    cargo22

    gracias de antemano, salu2

    domingo, 8 de noviembre de 2015 19:19
  • Public Class Form1
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            ListView1.View = View.Details
            ListView1.Columns.Add("Nombre")
            ListView1.Columns.Add("Apellido")
            ListView1.Columns.Add("Dpto")
            ListView1.Columns.Add("Cargo")
    
            ListView1.Items.Add("Name1").SubItems.AddRange(New String() {"Lastname1", "Dpto1", "Cargo11"})
            ListView1.Items.Add("Name2").SubItems.AddRange(New String() {"Lastname2", "Dpto1", "Cargo11"})
            ListView1.Items.Add("Name3").SubItems.AddRange(New String() {"Lastname3", "Dpto2", "Cargo21"})
    
            For Each g As IGrouping(Of String, ListViewItem) In ListView1.Items.Cast(Of ListViewItem).GroupBy(Function(lvi) lvi.SubItems(2).Text)
                Dim tn As TreeNode = TreeView1.Nodes.Add(g.Key)
    
                For Each gg As IGrouping(Of String, ListViewItem) In g.GroupBy(Function(lvi) lvi.SubItems(3).Text)
                    Dim tnn As TreeNode = tn.Nodes.Add(gg.Key)
    
                    ' no sé si esto va (vendrían a ser las hojas del árbol)
                    For Each item As ListViewItem In gg
                        tnn.Nodes.Add(String.Format("{0} {1}", item.Text, item.SubItems(1).Text))
                    Next
                Next
            Next
    
        End Sub
    End Class

    domingo, 8 de noviembre de 2015 20:06