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.