0

在 ASP.NET 3.5 中,我有一个绑定到 somwehat 动态数据表的数据网格。数据表是通过从数据集中返回三个不同的表并将它们组合成一个表来创建的。

它是这样的。第一个数据表返回最终数据表中的列列表。第二个数据表返回人员列表、他们的 ID 号、状态信息以及列在最终表行末尾的总计。第三个表返回与第一个表中的人员 ID 和列匹配的给定类型的值列表。

例子

表 1
ProdID ProdName
1 Widgets
2 Stuff
... ...

表 2
PersonID PersonName
103 John Smith
105 Tim Doe
... ...

表 3
PersonID ProdID 金额
103 1 205.00
103 2 234.00
105 1 150.00
105 2 189.00

结果表变为
PersonName ProdName Amount
John Smith Widgets 205.00
John Smith Stuff 234.00
Tim Doe Widgets 150.00
Tim Doe Stuff 189.00

我能够编写一个字典,按名称对每一列求和,但我想在最终表绑定到的数据网格的页脚中显示总和。

所以,Widgets 下面的总和应该是 355,Stuff 下面的总和应该是 423。问题是,我不知道如何将这些值放在页脚中。我为网格尝试了 OnDataBinding,但由于未绑定页脚,因此它永远不会停在那里。我不知道我是否可以“汇总”创建的表。

有任何想法吗?

4

4 回答 4

1

因此,据我了解,您希望根据产品名称获得每个分组的小计。

如果您知道列名是什么,则可以使用 LINQ 对结果进行分组以获取聚合,然后如果您希望将它们作为最后一条记录插入,只需在执行查询后将它们插入 DS。

于 2009-10-08T21:42:02.957 回答
1

在代码隐藏中这样的东西会起作用。您需要更改单元格索引、数据表名称等,但这实际上是您在页脚中添加总和的方式。

GridView1.FooterRow.Cells[4].Text = string.Format("{0:C}", myDataTable.Compute( "sum(Net_Price)", ""));

您还必须将 DataGrid 的“ShowFooter”属性设置为“True”。

全文在这里: http: //programming.top54u.com/post/ASP-Net-DataTable-Compute-Column-Sum-using-C-sharp.aspx

于 2009-10-08T21:52:15.830 回答
0

如何使用 group by 编写另一个 SQL Query,然后您可以很容易地获得每个子组的总数,以便隔离。然后解析查询结果集的每一行并构建一个字符串。使用您构建的字符串,它可以轻松插入到您想要的页脚中的任何列中。

于 2009-10-09T13:40:23.217 回答
0

我能够解决这个问题。我意识到,由于产品列表可以是动态的,因此我在 HTML/ASPX 代码中没有 BoundColumns。我必须以编程方式创建它们。创建它们时,我检查列的标题。如果标题作为键存在于我的字典中,则我返回该值(即总和)并将其设置为列 FooterText 值。

感谢所有的建议!

于 2009-10-09T13:54:06.027 回答