Pregunta

Tengo algunos datos que deben presentarse en forma de tabla con varias secciones. En particular, cada sección de datos se divide (con sus propios encabezados) por día. Esto es básicamente un acuerdo de una sola página, y realmente no se mantendrá, por lo que no quiero poner mucho esfuerzo en la arquitectura.

Tengo dos mesas. Encabezados y artículos.

HEADERS tienen un formato de:

date(datetime), type(tinyint), firstline(varchar), secondline(varchar)

ITEMS tiene un formato de

id(int), date(datetime), type(tinyint), name(varchar), value1(int), 
    value2(int), value3(int)

Necesito que los datos tengan un aspecto similar a este (la primera y la segunda línea están pobladas de datos, la tercera línea es texto estático, las líneas de elementos están pobladas de datos):

1/1/2009
--------------------------------------------------------------------------
|                              [First line]                              |
--------------------------------------------------------------------------
|                             [Second line]                              |
--------------------------------------------------------------------------
|  Date |       Name            |   Value 1    |   Value 2   |  Value 3  |
==========================================================================
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------
1/2/2009
--------------------------------------------------------------------------
|                              [First line]                              |
--------------------------------------------------------------------------
|                             [Second line]                              |
--------------------------------------------------------------------------
|  Date |       Name            |   Value 1    |   Value 2   |  Value 3  |
==========================================================================
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------

Esto se repetirá para todos los días actualmente en la base de datos, cada día tiene su propia tabla con sus propios encabezados. También se filtrarán por tipo. la página solo mostrará encabezados y elementos del tipo especificado. El tipo es un tinyint.

Entonces la pregunta es, ¿cuáles son los mejores elementos ASP.NET para usar? ¿Lista de datos? ¿Vista en cuadrícula? ¿Y cómo incluyo los datos de dos tablas en un formato de encabezado / elemento?

EDITAR: Lo siento, olvidé mencionar que esto tiene que funcionar en Windows 2000 / IIS5, así que estoy atascado con ASP.NET 2.0 y no puedo usar las características 3.0 o 3.5.

¿Fue útil?

Solución 5

Ok, aquí está la solución final que se me ocurrió. Estoy seguro de que este no es el más eficiente o el más rápido, pero solo necesitaba hacerlo y seguir con otra cosa.

Mi primer paso fue crear una clase base, a la que llamé RowBase, que era una clase abstracta que implementaba un método abstracto llamado GetRow (); Luego obtuve otras dos clases, BannerRow y ItemRow de RowBase. Estas clases contienen campos con todos los datos utilizados en mis tablas.

Luego creé dos DataTables y los llené con los resultados de mis dos consultas a través de un DataAdapter.

Luego, creé una Lista < RowBase > e interaccionado sobre las tablas de datos, creando un BannerRow o un ItemRow según el tipo de fila.

A continuación, ejecuté una Lista < RowBase > .Sort, ordenando la fecha y el tipo de fila para asegurarme de que BannerRows otorgue prioridad sobre ItemRows.

Finalmente, creé coloqué una tabla en mi formulario web, lo configuré como runat = " server " con un id = " mantenible " y luego itere sobre mi List < RowBase > y llamó a GetRow en cada RowBase.

BannerRow y ItemRow tenían una anulación de GetRow () que devolvía un HtmlTableRow formateado para incluir los datos en el formato correcto. Luego, usé una lógica condicional para insertar filas de encabezado para los datos de ItemRow, todo funcionó.

Esta es una variación de la idea de Rob y Ben, pero incluyó mucho más masaje de los datos, así que les di a ambos votos a favor, pero me atribuyo la respuesta.

Otros consejos

Echa un vistazo a asp: table. Puede agregar mediante programación las filas y columnas en algunas iteraciones condicionales anidadas en el código.

Recomendaría devolver los datos como XML y luego usar un XSLT para construir su informe. De lo contrario, tendrá que usar GridViews o repetidores anidados.

Si el patrón se cumple siempre con el mismo número de líneas, etc. Un repetidor puede ser su mejor opción y le dará el mayor control sobre cómo se ve el diseño en la pantalla.

Coloque un <asp:Table> en la página y construya desde el código detrás.

Use el parámetro colspan para las columnas (celdas) ya que esto le permite crear entradas que abarcan muchas columnas para las filas que lo necesitan.

Para su aplicación anterior, esto significaría que First Line y Second Line tendrían un colspan de 5.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top