3

我有一些数据必须以包含多个部分的表格形式呈现。特别是,每个数据部分都按天分解(带有自己的标题)。这基本上是一次性的单页交易,不会真正维护,所以我不想在架构上投入太多精力。

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

HEADERS 的格式为:

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

项目的格式为

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 元素?数据列表?网格视图?以及如何以标题/项目格式包含两个表中的数据?

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

4

5 回答 5

2

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

于 2009-03-03T20:35:40.883 回答
1

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

于 2009-03-03T20:27:05.273 回答
1

如果模式每次都适用于相同数量的行等。中继器可能是您最好的选择,它可以让您最大程度地控制布局在屏幕上的外观。

于 2009-03-03T22:16:49.207 回答
1

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

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

对于上面的应用程序,这意味着 First Line 和 Second Line 的 colspan 为 5。

于 2009-03-04T13:24:02.537 回答
0

好的,这是我想出的最终解决方案。我确信这不是最有效或最快的,但我只需要完成它并继续做其他事情。

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

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

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

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

最后,我在我的网络表单上创建了一个表格,将其设置为 runat="server",id="maintable",然后我遍历我的 List<RowBase> 并在每个 RowBase 上调用 GetRow。

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

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

于 2009-03-05T00:30:14.697 回答