rellenar un TreeView desde tabla Access
Publicado por Javier (1 intervención) el 12/09/2008 22:55:10
Hola
Estoy utilizando el siguente codigo para rellenar un TreeView desde una tabla de Access, pero no consigo que me funcione.
No me da ningun error pero el contro se queda en blanco.
El codigo no entra en el bucle For Each dataRowCurrent, es como si la coleccion estubiera vacia pero no entiendo el porque
El codigo es el siguiente:
'Declarando DataAdapter, DataSet, Parametro a utilizar
Private oDA As OleDbDataAdapter
Private oDS As DataSet
conexion = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Settings.CadenaDeConexion)
Dim SQLZONAS As String
SQLZONAS = "SELECT ZONAS.ID_Zona, ZONAS.ZONA, ZONAS.Nodo, ZONAS.NodoPadre FROM ZONAS ORDER BY ZONAS.Nodo, ZONAS.NodoPadre;"
oDA = New OleDbDataAdapter(SQLZONAS, conexion) 'SqlDataAdapter '("", oCNT)
oDS = New DataSet
oDA.Fill(oDS, "ZONAS")
If oDS.Tables("ZONAS").Rows.Count > 0 Then
GoTo Continua
Else
MsgBox("La consulta esta vacia", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
Continua:
'Llamar al Método Recurrente por primera vez que llenará el TreeView()
CrearNodosDelPadre("0", Nothing)
'Destruyendo(Objetos)
oP1 = Nothing
oDA = Nothing
oDS = Nothing
'Cerrando la Coneccion
conexion.Close()
End Sub
Private Sub CrearNodosDelPadre(ByVal indicePadre As Integer, ByVal nodePadre As TreeNode)
'Esta es la funcion recursiva, que llena el TreeView
Dim dataViewHijos As DataView
dataViewHijos = New DataView(oDS.Tables("ZONAS"))
dataViewHijos.RowFilter = oDS.Tables("ZONAS").Columns("NODO").ColumnName + " = " + indicePadre.ToString()
' Agregar al TreeView los nodos Hijos que se han obtenido en el DataView.
For Each dataRowCurrent As DataRowView In dataViewHijos
Dim nuevoNodo As New TreeNode
nuevoNodo.Text = dataRowCurrent("ZONA").ToString().Trim()
' si el parámetro nodoPadre es nulo es porque es la primera llamada, son los Nodos
' del primer nivel que no dependen de otro nodo.
If nodePadre Is Nothing Then
TreeView_Edificios.Nodes.Add(nuevoNodo)
Else
' se añade el nuevo nodo al nodo padre.
nodePadre.Nodes.Add(nuevoNodo)
End If
' Llamada recurrente al mismo método para agregar los Hijos del Nodo recién agregado.
CrearNodosDelPadre(Int32.Parse(dataRowCurrent("NodoPadre").ToString()), nuevoNodo)
Next dataRowCurrent
End Sub
La tabla de la que cojo los datos es la siguiente:
Campo "NODO" tipo Integer
Campo "NodoPadre" tipo integer
Campo "ZONA" tipo text 8 (Es el nombre del nodo a mostrar en el TreeView)
Los datos de prueba que tengo, son:
NODO NodoPadre ZONA
1 0 Nodo1
2 1 Nodo11
3 1 Nodo12
4 2 Nodo111
5 0 Nodo2
La version que utilizo es Visual Studio 2005
Si alguien puede ayudarme, se lo agradeceria, estoy totalmente atancado con este asunto. No tengo ni idea de por que no entra en el bucle.
Muchas gracias
Estoy utilizando el siguente codigo para rellenar un TreeView desde una tabla de Access, pero no consigo que me funcione.
No me da ningun error pero el contro se queda en blanco.
El codigo no entra en el bucle For Each dataRowCurrent, es como si la coleccion estubiera vacia pero no entiendo el porque
El codigo es el siguiente:
'Declarando DataAdapter, DataSet, Parametro a utilizar
Private oDA As OleDbDataAdapter
Private oDS As DataSet
conexion = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Settings.CadenaDeConexion)
Dim SQLZONAS As String
SQLZONAS = "SELECT ZONAS.ID_Zona, ZONAS.ZONA, ZONAS.Nodo, ZONAS.NodoPadre FROM ZONAS ORDER BY ZONAS.Nodo, ZONAS.NodoPadre;"
oDA = New OleDbDataAdapter(SQLZONAS, conexion) 'SqlDataAdapter '("", oCNT)
oDS = New DataSet
oDA.Fill(oDS, "ZONAS")
If oDS.Tables("ZONAS").Rows.Count > 0 Then
GoTo Continua
Else
MsgBox("La consulta esta vacia", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
Continua:
'Llamar al Método Recurrente por primera vez que llenará el TreeView()
CrearNodosDelPadre("0", Nothing)
'Destruyendo(Objetos)
oP1 = Nothing
oDA = Nothing
oDS = Nothing
'Cerrando la Coneccion
conexion.Close()
End Sub
Private Sub CrearNodosDelPadre(ByVal indicePadre As Integer, ByVal nodePadre As TreeNode)
'Esta es la funcion recursiva, que llena el TreeView
Dim dataViewHijos As DataView
dataViewHijos = New DataView(oDS.Tables("ZONAS"))
dataViewHijos.RowFilter = oDS.Tables("ZONAS").Columns("NODO").ColumnName + " = " + indicePadre.ToString()
' Agregar al TreeView los nodos Hijos que se han obtenido en el DataView.
For Each dataRowCurrent As DataRowView In dataViewHijos
Dim nuevoNodo As New TreeNode
nuevoNodo.Text = dataRowCurrent("ZONA").ToString().Trim()
' si el parámetro nodoPadre es nulo es porque es la primera llamada, son los Nodos
' del primer nivel que no dependen de otro nodo.
If nodePadre Is Nothing Then
TreeView_Edificios.Nodes.Add(nuevoNodo)
Else
' se añade el nuevo nodo al nodo padre.
nodePadre.Nodes.Add(nuevoNodo)
End If
' Llamada recurrente al mismo método para agregar los Hijos del Nodo recién agregado.
CrearNodosDelPadre(Int32.Parse(dataRowCurrent("NodoPadre").ToString()), nuevoNodo)
Next dataRowCurrent
End Sub
La tabla de la que cojo los datos es la siguiente:
Campo "NODO" tipo Integer
Campo "NodoPadre" tipo integer
Campo "ZONA" tipo text 8 (Es el nombre del nodo a mostrar en el TreeView)
Los datos de prueba que tengo, son:
NODO NodoPadre ZONA
1 0 Nodo1
2 1 Nodo11
3 1 Nodo12
4 2 Nodo111
5 0 Nodo2
La version que utilizo es Visual Studio 2005
Si alguien puede ayudarme, se lo agradeceria, estoy totalmente atancado con este asunto. No tengo ni idea de por que no entra en el bucle.
Muchas gracias
Valora esta pregunta


0