我正在使用 gridview 来显示大量数据。
数据源存储在会话中,因此我可以对网格视图进行分页/排序,而无需额外访问 SQL 服务器。
有没有更好的方法来分页/排序网格而不必在会话中存储数据?
我正在使用 gridview 来显示大量数据。
数据源存储在会话中,因此我可以对网格视图进行分页/排序,而无需额外访问 SQL 服务器。
有没有更好的方法来分页/排序网格而不必在会话中存储数据?
我认为这完全取决于您正在使用的数据量。如果您正在处理几百行,我建议您查看 jQuery 插件DataTables。从代码的角度来看,您制作了一个常规表格,然后在 document.Ready 事件中应用 DataTables 脚本。它具有分页、排序和过滤功能。它非常强大。
如果您正在处理一千或更多行,我建议您在服务器端进行分页和排序。在这种情况下,当用户翻页时,您再次访问数据库并仅返回他们在任何给定时间查看的行数。因此,如果您只在一个页面上显示 50 条记录,那么您的查询应该只返回 50 条记录。这种方式有点棘手,但对用户来说应该更快,并且不会冒达到最大页面大小的风险。
您可以根据寻呼机按钮以编程方式使行可见和不可见。将数据集分组为页面大小的块。当您隐藏一个块并使您想要的一个可见时,另一个应该弹出到它的位置。您可以在所有客户端执行此操作。
根据我的经验,我建议使用 ObjectDataSource,因为您可以通过反射大块数据动态地工作,而不会弄乱会话。您可以使用的其他附加功能:选择、插入和删除。
假设您希望将整个表存储在会话中以避免访问 SQL 服务器,一种方法是对数据进行自己的分页/排序,将生成的单页项目价值放入 List<>,然后填充具有该列表的 DataGrid。
您必须实现自己的 page-back/page-forward 控件,但这并不难。每次单击前进/后退按钮时,这些控件都会使用来自整个内存表的新页面的可查看数据填充列表。
优点是您可以完全控制所显示的数据页,而 DataGrid 控件不会尝试显示超出您想要的内容。
但请确保您在会话中缓存的数据不会过时;即,您没有显示已修改或删除的旧数据项,或未能显示新插入的项,因为您上次从 SQL 服务器检索表。某种超时可能是合适的,因此您每隔几分钟左右刷新一次数据库中的数据(而不是每次重新显示屏幕时)。