Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema para visualizar TreeView

Estas en el tema de Problema para visualizar TreeView en el foro de .NET en Foros del Web. Hola, desde hace un par de días estoy intentando visualizar unos datos de mi BD en modo árbol. El problema que tengo es que no ...
  #1 (permalink)  
Antiguo 21/07/2011, 01:05
 
Fecha de Ingreso: mayo-2011
Mensajes: 60
Antigüedad: 12 años, 11 meses
Puntos: 1
Problema para visualizar TreeView

Hola, desde hace un par de días estoy intentando visualizar unos datos de mi BD en modo árbol. El problema que tengo es que no lo consigo. Hasta ahora he seguido este link adaptándolo a mis datos: http://aspalliance.com/732_Display_H...w_in_ASPNET_20

Las sentencias a la BD las he provado y en principio funcionan bien.

En mi BD lo que me marca quien es el padre es el campo usu_asoc (string), en caso de estar a blanco indica que ese usuario es padre.

Espero me puedan ayudar a detectar el por qué no funciona. Muchas gracias desde ya.

HTML
Código HTML:
 <div id="vista_arbol">
        <asp:Label id="lblsuperusuario" Text="Introduce un super usuario" runat="server"></asp:Label><asp:TextBox id="tbsuperusuario" runat="server"></asp:TextBox><br />
        <asp:Button id="btnsuperusuario" Text="Crear Tree view" runat="server" OnClick="creartreview" /><br />
        <asp:Label id="lblerrorsuperusuario" Text="" runat="server"></asp:Label><br />
        <asp:TreeView id="TreeView1"
                      ExpandDepth="0" 
                      PopulateNodesFromClient="true"
                      ShowLines="true" 
                      ShowExpandCollapse="true" 
                      runat="server" />
    </div> 
CODE BEHIND
Código:
    Protected Sub creartreview(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnsuperusuario.Click

        Using cnn2 As New SqlConnection(cadenaConexion)

            Try

                Dim superuser As String = Me.tbsuperusuario.Text
                Dim sentenciasuperuser As String = "SELECT usuario, " _
                                                   & "(SELECT count(*) FROM usuarios_totales WHERE usuarios_totales.usu_asoc = @superuser AND usuarios_totales.activo = '1') childnodecount " _
                                                   & "FROM usuarios_totales" _
                                                   & "WHERE usuarios_totales.usuario = @superuser AND usuarios_totales.activo = '1'"
                cnn2.Open()
                Dim da As New SqlDataAdapter(sentenciasuperuser, cnn2)
                da.SelectCommand.Parameters.AddWithValue("@superuser", superuser)
                Dim dt As New DataTable
                da.Fill(dt)

                PopulateNodes(dt, TreeView1.Nodes)

            Catch ex0 As SqlException
                Me.lblerrorsuperusuario.Text = ex0.Message.ToString()
            Catch ex1 As Exception
                Me.lblerrorsuperusuario.Text = ex1.Message.ToString()
            Finally
                Me.lblerrorsuperusuario.Text = "Acabado"
                cnn2.Close()
            End Try
        End Using

    End Sub

    Protected Sub PopulateNodes(ByVal dt As DataTable, ByVal nodes As TreeNodeCollection)

        For Each dr As DataRow In dt.Rows
            Dim tn As New TreeNode()
            tn.Text = dr("usuario").ToString()
            tn.Value = dr("usuario").ToString()
            nodes.Add(tn)

            'If node has child nodes, then enable on-demand populating
            tn.PopulateOnDemand = (CInt(dr("childnodecount")) > 0)

        Next

    End Sub

    Private Sub PopulateSubLevel(ByVal parentid As String, ByVal parentNode As TreeNode)

        Using cnn3 As New SqlConnection(cadenaConexion)

            Try
                Dim sentenciasuperuser2 As String = "SELECT usuario, " _
                                                   & "(SELECT count(*) FROM usuarios_totales WHERE usuarios_totales.usu_asoc = @parentid AND usuarios_totales.activo = '1') childnodecount " _
                                                   & "FROM usuarios_totales" _
                                                   & "WHERE usuarios_totales.usu_asoc = @parentid AND usuarios_totales.activo = '1'"
                cnn3.Open()
                Dim da As New SqlDataAdapter(sentenciasuperuser2, cnn3)
                da.SelectCommand.Parameters.AddWithValue("@parentid", parentid)
                Dim dt As New DataTable()
                da.Fill(dt)
                PopulateNodes(dt, parentNode.ChildNodes)

            Catch ex0 As SqlException
                Me.lblerrorsuperusuario.Text = ex0.Message.ToString()
            Catch ex1 As Exception
                Me.lblerrorsuperusuario.Text = ex1.Message.ToString()
            Finally
                cnn3.Close()
            End Try
        End Using

    End Sub

    Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodePopulate
        PopulateSubLevel(CInt(e.Node.Value), e.Node)
    End Sub
  #2 (permalink)  
Antiguo 10/08/2011, 08:44
 
Fecha de Ingreso: mayo-2011
Mensajes: 60
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Problema para visualizar TreeView

Al final lo resolví añadiendo un id a los usuarios de manera que los trato exactametne igual que en el link que seguía.

Etiquetas: net
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:10.