【问题标题】:a large paged GridView, Rollup and Grand Totals with SQLdataSource带有 SQLdataSource 的大型分页 GridView、汇总和总计
【发布时间】:2011-04-14 07:11:11
【问题描述】:

如果我将我的数据集放入 DataTable 中,那么我可以随心所欲地使用它,但是我需要手动处理排序、分页和缓存的复杂性。我现在正试图避免这种情况。 如果我改为使用完全免费的 SQLdataSource。

我需要一个总计行,其内容显示在网格视图之外。

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

我首选的方法是让 SQLserver 使用 Group By Rollup 来完成繁重的工作,这会为我提供结果集的最后一行,其中包含我想要的总数。那么问题是我的 GridView 中有总计行,我不希望将总计行放在那里,因为我需要将总计放在其他地方(没有必要将它们放在可以对它们进行排序和分页的最后一页)。我想我可以再次捕获行绑定事件并使此总计行不可见,但这有点 hack 并且可能会混淆分页。

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

【问题讨论】:

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


    【解决方案1】:

    当您的意思是大型数据集时,我假设是一百万以上?

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

    或者也许有一个定时过期缓存的全部信息。如果数据足够大且不稳定,有时您必须考虑拥有准确的最新总计的商业价值。通常没有商业价值。几秒钟前的一个足够接近的值就可以了。

    至于 SqlDataSource 控件,我个人很讨厌。表示/逻辑/数据层发生了什么?!...

    【讨论】:

    • 不是那么大,只是我想知道是否有一种巧妙的方法可以把容易放在那里的东西(总和)拿出来,这样我就可以把它展示在更有用的地方。听起来好像没有。我可以用 jQuery 将它移出那里,但这有点 hack。三层架构?我可以做理论,但这是实践;-)
    • 好吧,我只是指出这是一种不好的做法。这里的答案很好。 stackoverflow.com/questions/6630291/…。 ASPX 对于单元测试来说已经足够臭名昭著了。添加 sqldatasource 控制简直是侮辱了伤害,并且是一种很少用于任何严重事件的做法。
    • 也许我不是很清楚 - 我不是寻求关于软件架构的经验教训或辩论,无论多么好意。
    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2020-05-10
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多