lunes, agosto 14, 2006

De tabla a TreeView en ASP NET 2.0 (versión 2)

Creamos la tabla donde tenemos la relación padre a hijo infinito para n nodos y con padres sin hijos:

CREATE TABLE [dbo].[Tabla](
[codigo] [int] IDENTITY(1,1) NOT NULL,
[nombre] [varchar](50) NOT NULL,
[padre] [int] NULL
) ON [PRIMARY]

GO

la rellenamos con datos:
INSERT Tabla (nombre)
VALUES('Luis')--sin padre
INSERT Tabla (nombre,padre)
VALUES('Pedro',1)
INSERT Tabla (nombre)
VALUES('Alfonso')
INSERT Tabla (nombre)
VALUES('Jose')
INSERT Tabla (nombre,padre)
VALUES('Fidel', 4)
INSERT Tabla (nombre,padre)
VALUES('Pepe', 2)


dentro de la etiqueta script de un formulario o página ASP incluyes este código:

Dim conex As String = "Data Source=OSCARVAIO;Initial Catalog=Pruebas;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(), masterRow("codigo").ToString())
If IsDBNull(masterRow("padre")) Then
TreeView1.Nodes.Add(masterNode)
Else
For Each node As TreeNode In TreeView1.Nodes
If node.Value.ToString() = masterRow("codigo").ToString() Then
masterNode = node
Exit For
End If
If node.ChildNodes.Count > 0 Then
Dim NodoEncontrado As TreeNode = BuscarNodo(node, masterRow("codigo").ToString())
If Not NodoEncontrado Is Nothing Then
masterNode = NodoEncontrado
Exit For
End If
End If
Next
End If
For Each childRow As DataRow In masterRow.GetChildRows("Hijo")
Dim childNode As New TreeNode(childRow("nombre").ToString(), childRow("codigo").ToString())
masterNode.ChildNodes.Add(childNode)
Next
Next
End Sub
Function BuscarNodo(ByVal arbol As TreeNode, ByVal codigo As String) As TreeNode
For Each node As TreeNode In arbol.ChildNodes
If node.Value.ToString() = codigo Then
BuscarNodo = node
Exit Function
End If
If node.ChildNodes.Count > 0 Then
BuscarNodo(node, codigo)
End If
Next
BuscarNodo = Nothing
End Function
Function GetData() As DataSet
Dim conn As SqlConnection = New SqlConnection(conex)
Dim sqlCat As StringBuilder = New StringBuilder()
sqlCat.Append("SELECT ISNULL(P1.Codigo,P2.Codigo) AS codigo, ")
sqlcat.Append("ISNULL(P1.nombre,P2.nombre) AS nombre, ")
sqlcat.Append("ISNULL(P1.padre,P2.padre) AS padre ")
sqlcat.Append("FROM ")
sqlCat.Append("(SELECT Tabla.codigo, Tabla.nombre, Tabla.padre ")
sqlcat.Append("FROM Tabla WHERE padre IS NULL) AS P1 ")
sqlcat.Append("FULL JOIN ")
sqlCat.Append("(SELECT T2.* ")
sqlcat.Append("FROM Tabla AS T1 INNER JOIN Tabla AS T2 ON ")
sqlcat.Append("T1.padre=T2.codigo) AS P2 ON ")
sqlcat.Append("P1.Codigo=P2.Codigo ")
sqlcat.Append("ORDER BY codigo ")
Dim sqlProd As String = "SELECT Codigo,Nombre,Padre FROM Tabla AS Hijos WHERE Padre<>''"
Dim daCat As SqlDataAdapter = New SqlDataAdapter(sqlCat.ToString(), 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


Lo ejecutas y podrás ver como se rellena el treeView.

Esta entrada del blog la he cambiado para completarla para n jerarquías y para padres huérfanos según algunos comentarios recibidos a fecha del '06/09/2008'.

Etiquetas

.net (1) ALGORITMO (4) algoritmos (1) Android (1) angular (2) aplicaciones WEB (1) ARGENTINA (1) ASP (4) asp .NET (1) ASP .NET Identity (1) attach (1) Azure (1) base de datos (1) BINDING (1) BioInformática (2) bootstrap (1) C (2) C# (27) castellano (1) catalán (1) Charla (1) CheckedListBox (1) Clase (1) clausura transitiva (2) CLIENTES (1) Closing (1) Combobox (1) Comisiones (1) CONCURSO (1) condones (1) consultas (1) corrupta (1) CORS OWIN (1) CORS WEB API 2 (1) Criptografía (1) CUENTA NARANJA (1) Custom Control (1) Daniel Seara (1) DATAGRIDVIEW (1) David Salgado (2) dendrograma (6) depurar (1) desarrollo (1) Deserializar (1) DEVCAMP (2) durex (1) e-DNI (1) el Guille (2) Eladio Rincón (1) elGamal (1) encriptación (1) encuesta (1) Entidad (1) ERROR (2) error 3624 (1) España (1) España es nido de víboras. (1) Euclides (1) Euclides extendido (1) evento (1) eventos. (1) factorización (1) factorizar (1) física (1) Framework 2.0 (1) Framework 3.5 (5) Framework 4 (2) Francisco González (1) Francisco Ruiz (1) GO (1) google (1) gossip (1) Grupos de usuarios (1) Guadalajara (1) Guille Comunity Tour (2) Gusenet (9) GUSENET. (1) Huelga informáticos (1) IBEX 35 (1) Idioma (1) IFT (1) IISExpress (1) Indice de Fuerza Tecnica (1) informática (1) Informix (1) ING DIRECT (1) INGDIRECT (1) Ingeniería Informática (2) Inteligencia artificial (5) Intro (1) IOS (1) IPad (1) IPhone (1) IV Aniversario (1) JavaScript (2) JPA (2) keybd_event (1) LA CAIXA (1) La Pineda (1) ladroentidad (1) Lector RSS (2) LINQ (5) LINQ2XML (1) ListBox (1) Live Distributed Objects (1) llenar (1) LOG (1) Madrid .NET (1) MainMenu (1) MAP (1) MAP 2011 (1) MAR DEL PLATA (1) matemáticas (1) Matriculación (1) MDIList (1) MdiWindowsListItem (1) MenuItem (1) MenuStrip (1) Microsoft (18) Microsoft Active Professional (1) Miguel Egea (2) MSDE 2 (1) MSDE 2000 (1) MVVM Light (2) mysql (1) NAMESPACE (1) Needleman (2) NET (1) NS (1) Oferta empleo (1) Office 14 (1) Office 2007 (1) Office 2009 (1) ON ERROR (1) OOB (1) Oscar Montesinos (1) OWIN (1) OWIN Security middleware (1) Paginación (1) PDC (1) Pedro Hurtado (1) PINTARTECA (1) PrinterSettings (1) Process (1) ProcessStartInfo (1) Programador (1) Relacional (1) robo (1) RSS (1) Rubén Garrigós (1) Salvador Ramos (1) Santa Pola (1) scrape (1) scraping (1) ScrollBar (1) Secretaría (1) SendInput (1) SENDKEYS (1) Sergio Vázquez (1) Serializar (1) Silverlight 2.0 (2) Silverlight 4 (1) Silverlight 5 (3) Silverlight. (1) Sindicado (1) Sistema Personal de Trading (3) Sistemas Distribuidos (1) SOLID SUMMIT 2009 (1) SPT (2) SQL Server (3) SQL Server 2000 (2) SQL Server 2005 (2) SQL Server 2008 (3) SQL Server Denali (1) SQL Server Information Services. (1) SQLU (1) SSIS (1) SUMMIT SQL (1) Suspect (1) Syndication (1) TAB (1) Tablas (1) Tarragona (1) Token bearer (1) ToolStripMenuItem (1) ToString() (1) Traductor (1) transacciones (1) treeview (1) truco (1) TRY CATCH (1) UCI (1) Unience (2) Universad (1) Universidad Oberta Catalunya (2) UOC (8) Usuarios. (1) VB (1) VB6 (1) VB9 (1) VIAJAR (1) Vila-seca (1) VISUAL BASIC (3) Visual Basic. (1) visual studio (1) Visual Studio 2005 (1) Visual Studio 2008 (16) Visual Studio 2010 (2) Visual Studio 2013 (1) VS2010 (1) VSTA (1) VSTO (1) WCF (1) WEB API (1) web.config (1) WebClient (1) WF (1) windows (1) Windows 7 (3) Windows 8 (2) Windows Azure (1) Windows pone (1) Windows Server 2008 (1) Windows Vista (1) woff (1) WP7 (1) WPF (1) Wunsch (2) XAML (4) XDocument (1) XElement (1) XML (3) XNA (1) Yield (2)