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

Datagrid ordenado por categorías

Estas en el tema de Datagrid ordenado por categorías en el foro de .NET en Foros del Web. Hola qtal, Es posible visualizar los datos en un DataGrid ordenados por categorías? Me explico mejor. Me gustaría sacar los Datos en un Datagrid siguiendo ...
  #1 (permalink)  
Antiguo 28/10/2003, 05:13
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
Datagrid ordenado por categorías

Hola qtal,
Es posible visualizar los datos en un DataGrid ordenados por categorías?
Me explico mejor. Me gustaría sacar los Datos en un Datagrid siguiendo la misma estructura que se usa en esta página (forosdelweb):
por ejemplo:

Tecnología e Interacción
- ASP
- PHP
- .NET
- ...

Otra Categoría
- Opción 1
- Opción 2
- ...

En ASP tradicional sabría hacerlo sin problemas recorriéndome el recordset y con una tabla, pero necesito hacerlo con un datagrid (si es que es posible).

Gracias y saludos
  #2 (permalink)  
Antiguo 28/10/2003, 10:28
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Si lo quieres hacer en un mismo grid, tendrías que utilizar un datareader con un subciclo, que es el que te leera las categorías...

Mira.. ésta sería mi idea.

Do while reader.read de mis categorías
....
.....
.....
Do while r2.read de los elementos de esa catergoría.

...
Loop
....
....
....
Loop


Y en tu grid puedes utilizar ItemTemplates para ir dibujando las tablas....y darle el formato que desees..

Saludos
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 28/10/2003, 11:05
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
Hola,
Entiendo lo que me quieres decir, lo que no veo es cuando tengo que asignar la consulta al datagrid
Es decir, vale yo con un dataReader recupero las categorías y hago el bucle para ir recuperando las subcategorías pero ... cuando las "paso" al DataGrid?


Yo ahora tengo unos vectores con información recuperada con una select.

Tengo una función con:

ds = New DataSet()
Dim dt As New DataTable("Categorias")
dt.Columns.Add("cod_grup_caracteristica", GetType(String))
dt.Columns.Add("des_grup_caracteristica", GetType(String))
....
ds.Tables.Add(dt)


dt As New DataTable("Categorias")

y con un bucle que se repite desde 0 hasta mi_vector.length - 1
voy llenando ese DataTable con:
dr As DataRow = dt.NewRow()
dr(0).mi_vector1(i)
dr(1).mi_vector2(i)
....
dt.Rows.Add(dr)

return ds


En mi Page_Load(...) tengo
...
DataGrid.DataSource = ds
DataGrid.DataBind()

donde ds es lo que me ha devuelto la función.

Lo que no veo/no se hacer es como "añadir" filas antes de hacer asignarlo al DataGrid

Saludos,
  #4 (permalink)  
Antiguo 28/10/2003, 12:51
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
Hola qtal,
He encontrado una solución. Lo que pasa es que no me servirá de nada si no puedo hacer lo siguiente:

- Eliminar columnas de la fila creada
- Cambiar el aspecto a la fila (tamaño de la fuente, color, ...)

El tema es el siguiente:

Justo antes de asignar el DataSet con los valores de mi Select al Datagrid hago lo siguiente

'DataSet con mi Select
ds = GetDS2()

'Antes de asignar al DataGrid
Do While i <= ds.Tables(0).Rows.Count - 1
curCat = ds.Tables(0).Rows(i).Item(0)
If curCat <> prevCat Then
prevCat = curCat
Dim shRow As DataRow = ds.Tables(0).NewRow
shRow(1) = ds.Tables(0).Rows(i).Item(0)
'Change ItemDataBound marker to Negative Number
shRow(2) = -1
shRow(3) = ds.Tables(0).Rows(i).Item(1)
ds.Tables(0).Rows.InsertAt(shRow, i)
i += 1
End If
i += 1
Loop

'Lo asigno al datagrid
tabs.DataSource = ds
tabs.DataBind()


Con esto consigo insertar una fila con el nombre de la categoría y a continuación todas las subcategorías de esa categoría.

Ahora bien, esa fila que me inserta, me la inserta con el mismo número de columnas que las otras (me parece lo más normal del mundo que lo haga así), cuando yo sólo quiero tener una columna para ese tipo de filas (donde me sale la categoría).

Como puedo acceder por código a esas filas? Había pensado en usar el OnItemDataBound aprovechando esta línea de código del bucle "shRow(2) = -1", pero no se cómo hacerlo porque todas las columnas de mi DataGrid son ItemTemplate.
  #5 (permalink)  
Antiguo 28/10/2003, 13:08
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
Hola qtal,

Esto es lo que he encontrado,

Public Sub pr_comprobar_categoria(ByVal sender As System.Object, ByVal e As DataGridItemEventArgs)

Dim gridrow As DataGridItem
If e.Item.ItemIndex >= 0 Then
For Each gridrow In tabs.Items
If (CType(gridrow.FindControl("cod_carac"), Label).Text = "-1") Then
CType(gridrow.FindControl("des_carac"), Label).Font.Bold = True
End If
Next
End If
End Sub

Estoy seguro que se puede mejorar cien veces porque esto se ejecuta con el OnItemDataBound y para todos los registros del DataGrid, que pueden ser 100 mil millones.

Alguien sabe una manera más optima de ir directamente a la fila que me interesa de un DataGrid con itemTemplates?

Saludos,
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:44.