Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con DataView y RowFilter

Estas en el tema de Problema con DataView y RowFilter en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 26/08/2005, 14:55
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Problema con DataView y RowFilter

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!.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 29/08/2005, 10:17
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
El problema es que...

por cada nodo tienes que enviar a hacer el filtro, para agregarle sus hijos... y a esos hijos tambien agregarle sus hijos...lo que sugiere una funcion recursiva...

No se si se podrá implementar de forma no recursiva...pero si te sirve te anexo un link donde se implementa de forma recursiva el llenado...

Llenar un TreeView desde un DataSet en VB .NET


Espero te sirva...
  #3 (permalink)  
Antiguo 29/08/2005, 10:30
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Si, de hecho de ahí saqué para hacerlo con un par de moficaciones para que se adapte mejor a mi código. Esa página está excelente.
Igualmente muchas gracias por responder y ayudarme.
Un saludo!.
__________________
Add, never Remove
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:26.