带有SQLdataSource的大型分页GridView,Rollup和Grand Totals

时间:2010-09-19 09:54:55

标签: c# asp.net sql-server gridview sqldatasource

如果我将数据集导入DataTable,那么我可以随意使用它,但我手动处理排序,分页和缓存的复杂性。我现在正试图避免这种情况。 如果我改为使用一个完全免费的SQLdataSource。

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

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

我首选的方法是让SQLserver使用Group By Rollup进行繁琐的工作,它给出了结果集的最后一行以及我想要的总数。问题是我在GridView中有总计行,我不想在那里,因为我需要将总数放在其他地方(没有必要将它们放在最后一页,可以对它们进行排序和分页)。我想我可以再次捕获行绑定事件并使这个总行不可见,但这有点黑客并且可能会混淆分页。

所以我想知道是否有一种巧妙的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

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

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

或者可能有定时到期缓存的总计信息。如果数据足够大且不稳定,有时您将不得不考虑具有精确的最新总数的商业价值。通常没有商业价值。几秒钟之前的价值已经足够接近了。

对于SqlDataSource控件,我个人讨厌它。无论演示文稿/逻辑/数据层发生了什么?!...