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

Dradi, tenías toda la razón, el código resulta muy bien, ya no aparecen esos errores extraños de un principio, lo único que modifiqué fue la consulta para que aparecieran los datos como debe ser "Cuenta y Descripcion", y resulta bien, el único problemita es que esos valores de campos "Cuenta y Descripcion" se repiten en varios registros por lo cual hay muchos nodos iguales, o repetidos, con el mismo numero de Cuenta y con la misma Descripcion, traté de filtrarla con un distinct en la consulta así

"Select distinct Cuenta,* From Cuentas"
pero no pasó nada, y el código que creaste está igual solo modifiqué un poco la consulta

Imports System.Data.SqlClient
Public Class Form3

Dim Con As New SqlConnection("SERVER=servidor;DATABASE=bd;UID=usu ario;PWD=password;")
Dim Adp As SqlDataAdapter
Dim Ds As DataSet
Dim Dt As New DataTable
Dim Dw As New DataView
Dim Nodo As TreeNode

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

' Si la Conexion esta Abierta entonces la Cierro
If Con.State = 1 Then Con.Close()
' Abro una Nueva Conexion
Con.Open()

Adp = New SqlDataAdapter("Select Cuenta,* From Cuentas", Con) ' Ejecuntando la Consulta
Ds = New DataSet ' Creando un Nuevo Objeto DataSet
Adp.Fill(Ds, "x") ' Llenando el DataSet con el Resultado de la Consulta ' Asignando la Tabla al DataTable
Dw.Table = Ds.Tables("x") ' Asignando al DataView Nuestro DataTable
Dw.RowFilter = "CuentaPadre = '0'" ' Filtrando por El Padre
Dt = Dw.ToTable ' Asignando al DataTable la Tabla Filtrada

With TreeView1
.BeginUpdate() ' Evitando la Actualizacion del Control

Nodo = .Nodes.Add("Plan de Cuentas")
For Each Row As DataRow In Dt.Rows

Nodo.Nodes.Add(Row(0) + " - " + Row(3)) ' Rellenando el Nodo Principal
Dw.Table = Ds.Tables("x")
Dw.RowFilter = "CuentaPadre = '" + Row(0).ToString + "'"
Dt = Dw.ToTable

For Each RowH As DataRow In Dt.Rows

' Agregando el Hijo
Nodo.Nodes(Nodo.Nodes.Count - 1).Nodes.Add(RowH(0) + " - " + RowH(3))


Dw.Table = Ds.Tables("x")
Dw.RowFilter = "CuentaPadre = '" + RowH(0).ToString + "'"
Dt = Dw.ToTable

For Each RowN As DataRow In Dt.Rows

' Agregando el Nieto

Nodo.Nodes(Nodo.Nodes.Count - 1).Nodes(Nodo.Nodes(Nodo.Nodes.Count - 1).Nodes.Count - 1).Nodes.Add(RowN(0) + " - " + RowN(3))

Next
Next
Next

.EndUpdate() ' Actulizando el Control
.AllowDrop = True ' Realizar Drag and Drop
.Sort()

End With

End Sub


End Class

Lo otro, será muy dificil, hacer que se puedan crear o visualizar n nodos?, o sea no llegar solo hasta los nietos, sino que seguir, ya que en mi tabla hay muchas más generaciones hacia abajo.
Bueno, muchas gracias igual, ya que me has ayudado mucho.
Muchos Saludos.