【问题标题】:c# - gridview sorting/paging advicec# - gridview 排序/分页建议
【发布时间】:2012-09-22 19:26:46
【问题描述】:

我正在使用网格视图来显示大量数据。

数据源存储在会话中,因此我可以对网格视图进行分页/排序,而无需额外访问 SQL 服务器。

有没有更好的方法来对网格进行分页/排序,而不必在会话中存储数据?

【问题讨论】:

  • 有多少用户使用您的应用程序?通常最好只选择您显示的内容。这意味着在 DataSource 中的 GridView 中使用分页。假设您的 rdbms 是 SQL-Server,您可以使用 ROW_NUMBER 函数对结果集进行分区。然后只选择您需要的切片(例如第 100-200 行)。大多数情况下,首先在数据库中而不是在服务器的内存中执行此操作更有效且可扩展。
  • @TimSchmelter: 200+ ... 一次检索甚至 10-15 行都需要一段时间。我宁愿检索完整的数据集并在 SQL 服务器之外处理分页。
  • 需要“一段时间才能检索 10-15 行”这一事实可能表明存在更大的问题。

标签: c# asp.net vb.net gridview datasource


【解决方案1】:

您可以根据寻呼按钮以编程方式使行可见和不可见。将数据集分组为页面大小的块。当您隐藏一个块并使您想要的一个可见时,另一个应该弹出到它的位置。您可以在所有客户端执行此操作。

【讨论】:

    【解决方案2】:

    我认为这完全取决于您使用的数据量。如果您正在处理几百行,我建议您查看 jQuery 插件DataTables。从代码的角度来看,您制作了一个常规表格,然后在 document.Ready 事件中应用 DataTables 脚本。它具有分页、排序和过滤功能。它非常强大。

    如果您正在处理一千或更多行,我建议您在服务器端进行分页和排序。在这种情况下,当用户翻页时,您再次访问数据库并仅返回他们在任何给定时间查看的行数。因此,如果您只在一个页面上显示 50 条记录,那么您的查询应该只返回 50 条记录。这种方式有点棘手,但对用户来说应该会更快,而且不会冒达到最大页面大小的风险。

    【讨论】:

      【解决方案3】:

      根据我的经验,我建议使用 ObjectDataSource,因为您可以通过反射大块数据动态地工作,而不会弄乱会话。 您可以使用的附加功能:选择、插入和删除。

      【讨论】:

        【解决方案4】:

        假设您希望将整个表存储在会话中以避免访问 SQL 服务器,一种方法是对数据进行自己的分页/排序,将生成的单页项目价值放入列表中,然后使用该列表填充 DataGrid。

        您必须实现自己的页面后退/页面前进控件,但这并不难。每次单击前进/后退按钮时,这些控件都会用整个内存表中的新页面的可查看数据填充列表。

        优点是您可以完全控制所显示的数据页面,而 DataGrid 控件不会试图显示超出您想要的内容。

        但请确保您在会话中缓存的数据不会过时;即,您没有显示已修改或删除的旧数据项,或者未能显示新插入的项,因为您上次从 SQL 服务器检索表。某种超时可能是合适的,因此您每隔几分钟左右刷新一次数据库中的数据(而不是每次重新显示屏幕时)。

        【讨论】:

          猜你喜欢
          • 2012-08-23
          • 2012-03-14
          • 1970-01-01
          • 1970-01-01
          • 2014-09-14
          • 2012-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多