Registrarse
Entrar
 
 Buscar  
Archivo de Blogs
 
Lista de Blogs
 
Enlaces de Colaboradores
 
Buscar
De tabla SQL a TreeView en ASP NET 2.0
Localización: BlogsDosFlores en .NET    
Publicado por: DosFlores 10/10/2007 11:24
A ver si podemos mejorarlo entre todos...
Suponiendo que tenemos una tabla de personas con una relación padre-hijo en la misma tabla:

codigo, nombre, padre
"0000", "Luis", "" (sin padre)
"0001", "Juan", "0000"
"0002", "Pedro", "0000"
"0003", "Alfonso", ""
"0004", "Jose", ""
"0005", "Fidel", "0004"

Copia este código en un form de ASP de VS2005 añadiendo < en las etiquetas de HTML al principio.

%@ Page Language="VB" %>
%@ Import Namespace="System.Data" %>
%@ Import Namespace="System.Data.SqlClient" %>

script runat="server">
Dim conex As String = "Data Source=JPA64;Initial Catalog=JPA;Integrated Security=True"
Sub Page_Load()
If Not Page.IsPostBack Then
FillNodes()
End If
End Sub

Sub FillNodes()
Dim ds As DataSet = GetData()
For Each masterRow As DataRow In ds.Tables("Padres").Rows
Dim masterNode As New TreeNode(masterRow("Nombre").ToString())
TreeView1.Nodes.Add(masterNode)
For Each childRow As DataRow In masterRow.GetChildRows("Hijo")
Dim childNode As New TreeNode(childRow("Nombre").ToString())
masterNode.ChildNodes.Add(childNode)
Next
Next
End Sub

Function GetData() As DataSet
Dim conn As SqlConnection = New SqlConnection(conex)
Dim sqlCat As String = "SELECT Padres.Padre AS Codigo, Tabla.Nombre "
sqlCat += "FROM (SELECT DISTINCT Padres.Padre "
sqlCat += "FROM Tabla AS Padres WHERE Padre<>'') AS Padres INNER JOIN "
sqlCat += "Tabla ON Padres.Padre=Tabla.Codigo"
Dim sqlProd As String = "SELECT Codigo,Nombre,Padre FROM Tabla AS Hijos WHERE Padre<>''"
Dim daCat As SqlDataAdapter = New SqlDataAdapter(sqlCat, conn)
Dim daProd As SqlDataAdapter = New SqlDataAdapter(sqlProd, conn)
Dim ds As DataSet = New DataSet()
daCat.Fill(ds, "Padres")
daProd.Fill(ds, "Hijos")
ds.Relations.Add("Hijo", _
ds.Tables("Padres").Columns("Codigo"), _
ds.Tables("Hijos").Columns("Padre"))
Return ds
End Function

/script>

form id="form1" runat="server">
div>
?xml:namespace prefix = asp />
/div>
/form>

Me faltaría resolver que hacer con un padre sin hijos, pero no me ha dado tiempo, prometo que en una futura versión os actualizaré este artículo con ese fallo arreglado.
Inicio  |  Grupos de discusión  |  Eventos  |  Blogs   |  Galería de imágenes  |  Contactar