Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/04/2009, 16:08
solangel
 
Fecha de Ingreso: abril-2008
Mensajes: 82
Antigüedad: 16 años
Puntos: 0
Pregunta Cómo lleno el treeview desde una sola tabla de mi bd?

Hola amigos del foro, me pueden ayudar, estoy super angustiada tratando de llenar un treview desde una sola tabla, en vb.net 2005, sql2000.
Resulta que tengo la tabla Cuentas donde en un registro el campo cuenta es único por ej "1.0.0.00.00" pero en otros ese valor de cuenta se puede repetir como campo cuentapadre donde varios registros pueden tener como cuentapadre el valor "1.0.0.00.00" o sea en la misma tabla tengo al padre y sus hijos, y los hijos de sus hijos y así sucesivamente. Los primeros padres son solo cinco, cinco niveles diferentes y de ahí cada padre puede heredar n hijos.
Pero nosé como llamar a esos datos de la bd.
Traté de hacer dos consultas, para ligar cuenta con cuentapadre pero creo que no están bien.

los campos son los valores son por ej

Naturaleza nodo1 nodo2 nodo3 nodo4 nodo5

Nivel 1 2 3 4 5

Cuenta 1.0.0.00.00 2.0.0.00.00 3.0.0.00.00 4.0.0.00.00 5.0.0.00.00

también está el campo descripcion que vendría siendo los nombres de los demás nodos, por ej

descripcion nodo1.1 nodo2.1 nodo 3.1 nodo 4.1 nodo 5.1

descripcion nodo 1.2 nodo 2.2 nodo 3.2 nodo 4.2 nodo 5.2 , etc

y dentro de cada uno hay hijos y mas hijos con un numero de cuenta único, por ej el hijo de nodo1 tiene cuenta 1.1.0.00.00 y la cuenta de su padre es 1.0.0.00.00 y así sucesivamente...

para llenar el treeview desde la bd tengo el sgte codigo que adapté de internet

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim nodo As TreeNode

' crear conexión
Dim oConexion As New SqlConnection
oConexion.ConnectionString = "Server=(local);Database=basedatos;uid=usuario;pwd =password;"

' crear los DataAdapter
Dim oDACuentas As New SqlDataAdapter("SELECT Naturaleza,Nivel,Cuenta FROM Cuentas ORDER BY Nivel", oConexion)

Dim oDACuentas1 As New SqlDataAdapter("SELECT Descripcion,Cuenta,CuentaPadre FROM Cuentas where CuentaPadre in (Select CuentaPadre FROM Cuentas where Cuenta in (select Cuenta from Cuentas))", oConexion) 'creo que no está bien

' crear conjunto de datos
Dim oDataSet As New DataSet

' abrir la conexión
oConexion.Open()

' utilizar los adaptadores para llenar el dataset con las tabla
oDACuentas.Fill(oDataSet, "Cuentas")
oDACuentas1.Fill(oDataSet, "Cuentas")


' cerrar la conexión
oConexion.Close()

' defino variables del tipo DataTable
Dim oTablaCuentas As DataTable
Dim oTablaCuentas1 As DataTable

' asigno a las variables los datos de las tablas del DataSet
oTablaCuentas = oDataSet.Tables("Cuentas")
oTablaCuentas1 = oDataSet.Tables("Cuentas")

' lleno la vista con el contenido de la Tabla Cuentas
oVista = oTablaCuentas.DefaultView

' deshabilita la actualización en pantalla del control TreeView
TreeView1.BeginUpdate()

' defino variable del tipo DataRow
Dim Registro As DataRow

' creo un nodo raiz
nodo = TreeView1.Nodes.Add("Plan de Cuentas")

For Each Registro In oTablaCuentas.Rows
' agrego el nodo en el segundo nivel
nodo = TreeView1.Nodes(0).Nodes.Add(Trim(Registro("Natura leza")))
' si no hay un nodo raiz, se usaría la siguiente línea
'nodo = TreeView1.Nodes.Add(Trim(Registro("Naturaleza")))

' realizo un filtro dentro de la vista
oVista.RowFilter = "CuentaPadre = " & Registro("CuentaPadre")
' acá me da el sgte error : falta el operando después del operador '='.

' ciclo para recorrer la vista previamente filtrada
Dim a As Integer
For a = 0 To oVista.Count - 1
' agrego el nodo en el tercer nivel
nodo.Nodes.Add(Trim(oVista.Item(a).Row("Descripcio n")))
Next
' expando todos los nodos de árbol secundario
nodo.ExpandAll()
Next
' habilita la actualización en pantalla del control TreeView
TreeView1.EndUpdate()

' modifico la propiedad AllowDrop a True para poder realizar Drag and Drop
TreeView1.AllowDrop = True

' modifico la propiedad Sorted a True para que los nodos estén ordenados
TreeView1.Sorted = True
End Sub

En realidad no sé si saqué bien los datos de la bd, no me resulta y estoy bien complicada, si alguien me pudiera ayudar con la información que le proporcione le estaré muy agradecida.

Muchas gracias.