如何在ASP.NET中创建包含节和标题的表?

时间:2009-03-03 20:18:39

标签: c# asp.net sql-server grouping

我有一些数据必须以表格形式显示多个部分。特别是,每天的数据部分都会被分解(使用它自己的标题)。这基本上是一次性的单页交易,并不会真正维护,所以我不想在架构上付出很多努力。

我有两张桌子。标题和项目。

HEADERS的格式为:

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

ITEMS的格式为

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

我需要数据看起来与此类似(第一行和第二行是填充的数据,第三行是静态文本,项目行是填充的数据):

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

这将重复当前数据库中的所有日子,每天都有自己的表格及其自己的标题。它们也将按类型过滤。该页面仅显示指定类型的标题和项目。类型是一个tinyint。

所以问题是,使用的最佳ASP.NET元素是什么? DataList控件?网格视图?如何以标题/项目格式包含两个表中的数据?

编辑: 对不起,忘了提到这必须在Windows 2000 / IIS5上工作,所以我坚持使用ASP.NET 2.0,不能使用3.0或3.5功能。

5 个答案:

答案 0 :(得分:2)

看看asp:table。您可以在代码中以编程方式在一些嵌套条件迭代中添加行和列。

答案 1 :(得分:1)

我建议将数据作为XML返回,然后使用XSLT构建报告。否则,您将不得不使用嵌套的GridView或转发器。

答案 2 :(得分:1)

如果每次使用相同数量的线等时模式都成立,则转发器可能是您最好的选择,并且可以最大程度地控制布局在屏幕上的显示方式。

答案 3 :(得分:1)

在页面上放置<asp:Table>并从后面的代码中构建它。

对列(单元格)使用colspan参数,因为这允许您为需要的行创建跨越多列的条目。

对于上面的应用,这意味着第一行和第二行的colspan为5。

答案 4 :(得分:0)

好的,这是我提出的最终解决方案。我确信这不是最有效或最快的,但我只需要完成它并继续使用其他东西。

我的第一步是创建一个基类,我称之为RowBase,这是一个抽象类,它实现了一个名为GetRow()的抽象方法;然后我从RowBase派生了另外两个类BannerRow和ItemRow。这些类包含包含表格中所有数据的字段。

然后我创建了两个DataTables,并通过DataAdapter填充了我的两个查询的结果。

接下来,我创建了一个List&lt; RowBase&gt;并对数据表进行交互,根据行的类型创建BannerRow或ItemRow。

接下来,我运行了一个List&lt; RowBase&gt; .Sort,对日期和行类型进行排序,以确保BannerRows优先于ItemRows。

最后,我创建了一个在我的webform上放置一个表,将其设置为runat =“server”,id =“maintable”然后我迭代了我的List&lt; RowBase&gt;并在每个RowBase上调用GetRow。

BannerRow和ItemRow都覆盖了GetRow(),它返回了一个HtmlTableRow格式,以包含正确格式的数据。然后,我使用了一些条件逻辑来插入ItemRow数据的标题行。

这是Rob和Ben的想法的变体,但包含了更多的数据按摩,所以我给了他们两个赞成票,但我自己也给了答案。