
28/11/2007, 11:15
|
| | Fecha de Ingreso: diciembre-2003
Mensajes: 3
Antigüedad: 21 años, 3 meses Puntos: 0 | |
Re: HELP - DataList con número de columnas variable Bueno... Al final buscando por internet encontré una solución que me ha resultado la mar de útil. Os la pongo aquí
El problema, como ya he comentado antes, viene de cómo definir la plantilla en un DataList, cuando los datos me vienen de un DataSet con número de columnas variable. Los únicos datos fijos se llaman FECHA y DIASEMANA, y seguidamente, una serie de campos llamados IMPACTOS1, IMPACTOS2, ..., IMPACTOSn
Este es el ItemTemplate del DataList. Aquí sólo defino dos columnas, mientras que el resto se generarán en tiempo de ejecución mediante la función GeneraColumnasImpactos
<ItemTemplate>
<tr>
<td align=left><%#Left(Eval("Fecha"),10)%></td>
<td align=left><%#DiaSemanaSQL(Eval("DiaSemana"))%></td>
<%#GeneraColumnasImpactos(Container.DataItem, Servicio)%>
</tr>
</ItemTemplate>
Y esta es la famosa función
Protected Function GeneraColumnasImpactos(ByVal DataItem As Object, ByVal Valor As DataRow) As String
Dim d As DataList
d = CType(Page.FindControl("DataList1"), DataList)
d.Width = 165
GeneraColumnasImpactos = ""
For Each Servicio In MyDtsListaServicios.Tables("ListaServicios").Rows
d.Width = d.Width.Value + 110
If IsDBNull(DataBinder.Eval(DataItem, "Impactos" & Servicio("NumServicio"))) Then
GeneraColumnasImpactos = GeneraColumnasImpactos & "<td align=right>0 </td>"
Else
GeneraColumnasImpactos = GeneraColumnasImpactos & "<td align=right>" & DataBinder.Eval(DataItem, "Impactos" & Servicio("NumServicio")) & " </td>"
End If
Next
End Function
Básicamente, lo que hace esta función es recorrerse la tabla ListaServicios, que es un DataSet donde tengo un listado de las diferentes columnas de impactos. El número de estas columnas está guardado en la columna NumServicio. La solución es tan simple como ir recorriendo todas las filas de la tabla (con lo que obtendré el identificador de la columna), y generar a pelo las columnas del DataList con el campo "Impactos(id de la columna)". Al finalizar la función, el valor a devolver será una cadena con la definición de estas columnas y su contenido
La comprobación de si el valor es nulo o no no es necesaria; yo la puse para mostrar un valor 0 en caso de que el valor fuera nulo. También veréis que aprovecho para manipular la anchura del DataList; esto también es optativo
En fin, espero que esto pueda servir de ayuda a aquellos que se hayan encontrado con mi mismo problema |