Hola, estoy haciendo un árbol de categorías utilizando un Dataset, un Treeview y un DataView.
Al momento de recorrer los registros del DS, hago un DataView.RowFilter, para que me obtenga los registros dependientes de esa categoria. La cuestión es que el árbol de categorías funciona correctamente, pero no logro hacer bajo ninguna forma que pinte aquellas categorías que son de 4to. nivel.
La estructura del árbol es así:
-Categorías
----->Computación
----------->Computadoras
----------->Notebooks
----------->Impresoras
----------->...
----->Electrónica
----------->Audio para el hogar
------------------>
Minicomponentes
------------------>
Home Theaters
------------------>
...
----------->Audio para el auto
------------------>
Reproductores MP3
------------------>
Stereos
------------------>
...
----------->Tv y Video
------------------>
Televisores 14 pulgadas
------------------>
Televisores 21 pulgadas
------------------>
Televisores 25 pulgadas
------------------>...
----------->...
----->Libros
----------->Computación
----------->Management
----------->Narrativa
----------->Cuentos infantiles
----------->...
Esas categorías marcadas con negrita son las que no logro hacer que me aparezcan. Lo otro funciona correctamente.
Una de las alternativas que probé fue haciendo esto:
Código:
ForEach dr In dsDatos.Tables("Categorias").Rows
nodo = tv.Nodes(0).Nodes.Add(dr("CAT_NOMBRE"))
dvCategorias.RowFilter = "CAT_IDDEP = " & dr("CAT_ID")
Dim i AsInteger
For i = 0 To dvCategorias.Count - 1
If Not dvCategorias.Count = 0 Then
nodo_secundario = nodo.Nodes.Add(dvCategorias.Item(i).Row ("CAT_NOMBRE"))
dvCategorias.RowFilter = "CAT_IDDEP = " & dvCategorias.Item(i).Row("CAT_ID")
Dim a AsInteger
For a = 0 To dvCategorias.Count - 1
nodo_secundario.Nodes.Add(dvCategorias.Item(a).Row ("CAT_NOMBRE"))
Next
EndIf
Next
Next
Lo que eso me hace es dibujarme por cada categoría o subcategoria su primer nodo, y despues pasa al siguiente. Es decir, con eso, en total me quedan 7 categorias, cuando en realidad hay un total de 54 categorias.
El código que más me acercó a lo que estoy buscando fue esta alternativa (me da el problema que comenté arriba):
Código:
ForEach dr In dsDatos.Tables("Categorias").Rows
nodo = tv.Nodes(0).Nodes.Add(dr("CAT_NOMBRE"))
dvCategorias.RowFilter = "CAT_IDDEP = " & dr("CAT_ID")
Dim i AsInteger
For i = 0 To dvCategorias.Count - 1
nodo_secundario = nodo.Nodes.Add(dvCategorias.Item(i).Row ("CAT_NOMBRE"))
Next
Next
Alguien me puede ayudar a entender la lógica que hay detrás de este problema?
Espero que sí.
Un saludo a todos.
Suerte!.