我用C#和ASP.Net开发了一个电子商务应用程序。对于管理员用户“仪表板”登录页面,我想给他们一个GridView,向他们显示几个不同时间范围的总销售额金额,这些将是我的列(即最后一天,上周,上个月,最后一个年,总数)。我想为处于不同状态的订单提供这些值(即完整,付费但未发货,正在进行中)。类似的东西:
|OrderStatus|Today|LastWeek|LastMonth|
|Processed |$10 |$100 |$34000 |
|PaidNotShip|$4 |$12 |$45 |
我的问题:最好/最有效的方法是什么?我知道我可以编写单独的SQL语句并将它们组合在一起并将gridview绑定到sqldatasource:
(select amountForYesterday, amountForLastWeek from sales where orderStatus = processed)
UNION
(select amountForYesterday, amountForLastWeek from sales where orderStatus = paidnotshipped)
但这似乎是一种痛苦而且非常低效,因为我实际上会为每个值编写一个单独的查询。
我也可以在加载后面的.cs页面中执行此操作,并以编程方式逐行填充网格视图。
此GridView仅显示用户特定组织的信息,因此也必须根据该信息进行过滤。
我不知道如何在不编写大量查询的情况下执行此操作,并且每次查看页面时都会不断地访问该查询和数据库。
有什么想法吗?
答案 0 :(得分:0)
我更喜欢使用LINQ来处理数据和/或GridView(访问行等)。看看我在GitHub上的一个项目,这正是我在这里提到的,例如。请注意,这只是我之前用于说明目的的沙箱。
https://github.com/pauloosthuysen/int
http://www.codeproject.com/Articles/33685/Simple-GridView-Binding-using-LINQ-to-SQL
答案 1 :(得分:0)
LastWeek和LastMonth的销售等不会经常变化。您可以将其存储在由组织索引的静态字典中,或者将其汇总到单独的表中以便更快地访问。这样您就不需要选择相同的大量行来反复获取相同的数字。除非有特殊要求,否则我会坚持使用Dictionary解决方案,因为它很简单,但组合也可以是一个很好的解决方案
答案 2 :(得分:0)
没有直接的方法。 但是,您可以使用用于绑定到网格的数据表来执行这些操作,而不是将数据库命中到每列的总和。
您需要做的就是使用
Dim iSumSal As Integer
iSumSal = StudentTable.Compute(“SUM(sal)”,“”)
同样可以执行其他列。
一旦完成。然后只需在数据表中添加一个新行,其中包含所有求和值。
然后你可以将它绑定到你的网格。
可选 - 您可以将新行的第一列中的某些文本值设置为“Total:”
感谢
的Rahul