我有一些数据必须以表格形式显示多个部分。特别是,每天的数据部分都会被分解(使用它自己的标题)。这基本上是一次性的单页交易,并不会真正维护,所以我不想在架构上付出很多努力。
我有两张桌子。标题和项目。
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功能。
答案 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的想法的变体,但包含了更多的数据按摩,所以我给了他们两个赞成票,但我自己也给了答案。