Llenar un TreeView desde un DataSet en VB .NETUtilizar la jerarquía definida en los datos de una tabla para llenar un TreeView con un método recurrente sencillo (en VB. NET).
Fecha: 25/Jul/2005 (24/07/2005)
|
Atendiendo a la solicitud de muchos programadores que necesitaban el código en VB del ejemplo del artículo: Llenar un TreeView desde un DataSet usando un método recurrente que está escríto en C# y que fue publicado en este mismo sitio en la siguiente dirección: http://www.elguille.info/colabora/NET2005/svalsse_llenar_un_treeview.htm, publico este mismo ejemplo pero como ya dije en VB .NET.
Si no has leído el artículo anterior, te recomiendo que lo hagas para que veas el planteamiento del problema a resolver, ya que aquí expondré la solución en VB directamente para no repetir las partes comunes del artículo anterior.
Bien, la idea es llenar un TreeView con los datos contenidos en una tabla. Normalmente se tiene bien clara la jerarquía de los datos que se desean mostrar en la misma estructura de la tabla y esto se puede aprovechar para evitar estar definiendo nodo por nodo en el TreeView.
Creación de un formulario que llene un TreeView desde un DataSet usando un método recurrente
Para el ejemplo seguiremos los siguientes pasos:
1. Crear un proyecto de tipo Proyectos de Visual Basic, Aplicación para Windows y llámelo EjemploTreeView.
2. En el formulario generado (Form1) agrega dos controles, un TreeView y un Button. Desde la ventana de propiedades del botón asignar la propiedad Text = "Llenar TreeView".
3. Declara un DataSet que pueda ser visto por toda la clase Form1 (para ello hay que hacer la declaración en la sección "Declarations" del Form1).
4. En la ventana de Código agrega el método que se ejecutará recurrentemente llamándolo CrearNodosDelPadre.Private dataSetArbol As System.Data.DataSet
5. Para simplificar el ejemplo, adiciona los siguientes métodos que simularán los datos obtenidos desde una base de datos.Private Sub CrearNodosDelPadre(ByVal indicePadre As Integer, ByVal nodePadre As TreeNode) Dim dataViewHijos As DataView ' Crear un DataView con los Nodos que dependen del Nodo padre pasado como parámetro. dataViewHijos = New DataView(dataSetArbol.Tables("TablaArbol")) dataViewHijos.RowFilter = dataSetArbol.Tables("TablaArbol").Columns("IdentificadorPadre").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("NombreNodo").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 TreeView1.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("IdentificadorNodo").ToString()), nuevoNodo) Next dataRowCurrent End Sub
6. En el evento Load de la clase Form1() ingrese la llamada al método que llenará el DataSet. El código quedará como sigue:Private Sub CrearDataSet() Dim tablaArbol As DataTable dataSetArbol = New DataSet("DataSetArbol") tablaArbol = dataSetArbol.Tables.Add("TablaArbol") tablaArbol.Columns.Add("NombreNodo", GetType(String)) tablaArbol.Columns.Add("IdentificadorNodo", GetType(Integer)) tablaArbol.Columns.Add("IdentificadorPadre", GetType(Integer)) InsertarDataRow("Nodo 1", 1, 0) InsertarDataRow("Nodo 1.1", 2, 1) InsertarDataRow("Nodo 1.1.1", 3, 2) InsertarDataRow("Nodo 1.1.2", 4, 2) InsertarDataRow("Nodo 1.2", 5, 1) InsertarDataRow("Nodo 2", 6, 0) InsertarDataRow("Nodo 2.1", 7, 6) InsertarDataRow("Nodo 2.2", 8, 6) InsertarDataRow("Nodo 3", 9, 0) InsertarDataRow("Nodo 3.1", 10, 9) InsertarDataRow("Nodo 3.2", 11, 9) End Sub Private Sub InsertarDataRow(ByVal column1 As String, ByVal column2 As Integer, ByVal column3 As Integer) Dim nuevaFila As DataRow nuevaFila = dataSetArbol.Tables("TablaArbol").NewRow() nuevaFila("NombreNodo") = column1 nuevaFila("IdentificadorNodo") = column2 nuevaFila("IdentificadorPadre") = column3 dataSetArbol.Tables("TablaArbol").Rows.Add(nuevaFila) End Sub
7. Finalmente en el evento Click del boton button1 asocie el método siguiente que llamará al método para el llenado del TreeView.Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load CrearDataSet() End Sub
8. Compila y ejecuta el proyecto.Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Llamar al método por primera vez que llenará el TreeView, este método se llamará luego ' a sí mismo recurrentemente. CrearNodosDelPadre(0, Nothing) End Sub
Si necesitas obtener el IdentificadorNode del Nodo que el usuario selecciona se puede utilizar la propiedad Tag del nodo, por supuesto si previamente en la creación del nodo se almacenó dicho valor en esta propiedad.
Por favor no olvides calificar el artículo en la caja de PanoramaBox que se muestra al inicio de la página, eso te lo agradecería mucho.
Serge Valsse
[email protected]
Espacios de nombres usados en el código de este artículo:
System.Data