2010-09-19 73 views
2

如果我得到我的数据集到一个DataTable中,然后我可以用它做,因为我喜欢,但我有手动处理排序,分页和缓存的复杂性。我现在试图避免这种情况。 如果我改为使用全部免费的SQL数据源。一个大页面的GridView,汇总和总计与SQLdataSource

我需要一个总的行,我在gridview外显示的内容。

  • 我知道我可以通过在IIS中挂钩RowBound事件并总结我看到的每一行,但这似乎是一个复杂而行人。
  • 我知道我可以在我的SQLdataSource(它被缓存)上手动执行一个SQLdataSource.Select从中提取一个DataTable,然后使用DataTable.Compute对列进行求和,但是这看起来有点破解,而且我没有确定两个“选择”实际上在高速缓存方面的效率如何。

我的首选方法是让SQLserver使用Group By Rollup来完成繁琐的工作,该工具为我提供了结果集的最后一行以及我想要的总计。问题是我的GridView中有总计行,我不想在那里,因为我需要把总数放在别的地方(没有意义让他们在最后一页,他们可以被排序和分页)。我想我可以再次捕获行绑定事件,并使这个总计行不可见,但这有点破解,可能会混淆分页。

所以我想知道是否有一个简洁的方法来做到这一点?

回答

0

当你的意思是大数据集,我假设一百万加?

我建议缓存总计的结果。每次查看/分页时,都不需要重新计算。创建/更新/删除表格以刷新总计信息时创建可观察事件? (因为我没有看到你提到过滤,这是唯一一次总数变化没有数据集改变)

或者也许有定时到期缓存的总计信息。如果数据足够大且易变,那么有时候您必须考虑具有完全最新的总数的商业价值。通常这没有商业价值。从几秒前就足够接近价值是好的。

至于SqlDataSource控件,我个人讨厌它。无论发生什么事情发生/逻辑/数据层?!

+0

不是那么庞大,只是我想知道是否有一个简单的方法来获得容易放在那里(总卷起来),所以我可以将它显示在更有用的地方。这听起来好像没有。我可以用jQuery将它从那里转移出去,但这有点破绽。 三层架构?我可以做理论,但这是实践;-) – philw 2011-09-15 21:39:43

+0

嗯,我只是指出,这是一个不好的做法。这里的答案非常好。 http://stackoverflow.com/questions/6630291/asp-net-sqldatasource-vs-doing-it-in-code-behind。 ASPX的臭名昭着,因为它是单元测试。添加sqldatasource控件只是对伤害的侮辱,而且这种做法在任何严肃的事情中都很少使用。 – 2011-09-23 02:06:44

+0

也许我不清楚 - 我*不*要求在软件架构方面的经验教训或辩论,无论如何是好的。 – philw 2011-10-29 16:07:13