Question

J'ai certaines données qui doivent être présentées sous forme de tableau avec plusieurs sections. En particulier, chaque section de données est divisée (avec ses propres en-têtes) par jour. Il s’agit essentiellement d’un contrat unique d’une page qui ne sera pas vraiment conservé. Je ne souhaite donc pas faire beaucoup d’efforts en architecture.

J'ai deux tables. HEADERS et ITEMS.

Les HEADERS ont un format de:

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

ITEMS a un format de

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

J'ai besoin que les données ressemblent à ceci (les première et deuxième lignes sont des données renseignées, la troisième ligne est du texte statique, les lignes des éléments sont des données renseignées):

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] |
--------------------------------------------------------------------------

Ceci sera répété pour tous les jours actuellement dans la base de données, chaque jour ayant sa propre table avec ses propres en-têtes. Ils seront également filtrés par type. la page affiche uniquement les en-têtes et les éléments du type spécifié. Le type est un tinyint.

La question est donc de savoir quels sont les meilleurs éléments ASP.NET à utiliser. DataList? GridView? Et comment inclure les données de deux tables dans un format d'en-tête / d'élément?

EDIT: Désolé, j'ai oublié de mentionner que cela doit fonctionner sous Windows 2000 / IIS5. Je suis donc coincé avec ASP.NET 2.0 et je ne peux pas utiliser les fonctionnalités 3.0 ou 3.5.

Était-ce utile?

La solution 5

Ok, voici la solution finale que j'ai trouvée. Je suis sûr que ce n'est ni le plus efficace, ni le plus rapide, mais je devais juste le faire et passer à autre chose.

Ma première étape a été de créer une classe de base, que j'ai appelée RowBase. Il s'agissait d'une classe abstraite qui implémentait une méthode abstraite appelée GetRow (); Ensuite, j'ai dérivé deux autres classes, BannerRow et ItemRow de RowBase. Ces classes contiennent des champs avec toutes les données utilisées dans mes tables.

J'ai ensuite créé deux DataTables et les ai renseignés avec les résultats de mes deux requêtes via un DataAdapter.

Ensuite, j'ai créé une liste < RowBase > et interaté sur les tables de données, en créant un BannerRow ou un ItemRow en fonction du type de ligne.

Ensuite, j'ai lancé une liste < RowBase > .Trier, triant la date et le type de ligne pour vous assurer que BannerRows donne la priorité sur ItemRows.

Enfin, j'ai créé une table sur mon formulaire Web, réglez-la sur runat = " serveur " avec un id = "able

BannerRow et ItemRow avaient chacune un remplacement de GetRow () qui renvoyait un HtmlTableRow formaté pour inclure les données au bon format. Ensuite, j'ai utilisé une logique conditionnelle pour insérer des lignes d'en-tête pour les données ItemRow toutes élaborées.

Il s’agit d’une variante de l’idée de Rob et Ben, mais elle inclut beaucoup plus de massages des données. C’est pourquoi je leur ai accordé des votes supérieurs, mais je me suis attribué la réponse.

Autres conseils

Découvrez asp: table. Vous pouvez ajouter par programme les lignes et les colonnes dans certaines itérations conditionnelles imbriquées dans le code.

Je vous recommanderais de renvoyer les données au format XML, puis d’utiliser un XSLT pour créer votre rapport. Sinon, vous devrez utiliser des GridView ou des répéteurs imbriqués.

Si le motif est toujours vrai avec le même nombre de lignes, etc. Un répéteur peut être votre meilleur choix et vous permettre de mieux contrôler l'aspect de la présentation à l'écran.

Placez un <asp:Table> sur la page et construisez-le à partir du code situé derrière.

Utilisez le paramètre colspan pour les colonnes (cellules), car cela vous permet de créer des entrées couvrant plusieurs colonnes pour les lignes qui en ont besoin.

Pour votre application ci-dessus, cela signifierait que First Line et Second Line auraient un colspan de 5.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top