在列表视图滚动中加载数据
本文关键字:加载 数据 滚动 列表 视图 | 更新日期: 2023-09-27 18:28:18
与以下主题相关(或者说由于),我能够在ListView中处理滚动事件:如何为ListView 制作滚动事件
在我的情况下,我需要在一个页面上显示大约60k行,而不使用分页来减少对性能的影响。
我现在的问题是:一旦滚动事件触发,处理这种情况/动态加载数据的最佳方式是什么。。。?
目前,我正在程序启动时加载大约100行,并在每个滚动触发器上添加一行。在后台,我使用了一个简单的LIMIT-SQL阶段。
老实说,这看起来不太好(你实际上可以看到有东西正在加载,所以它不平滑),有时它似乎会导致一些访问验证错误。
那么,做这样的事情的总体想法是什么呢?我可能需要往正确的方向推:-)
谢谢你的帮助。
致以最良好的问候Teyhouse
几个月前我做了一些这样的事情。因此,诀窍总是加载N行而不是1行,因为当滚动即将结束时,这将是非常低效的(就像FB和谷歌阅读器所做的那样)。因此,在您的情况下,当您的滚动即将结束时,始终加载100行。
这是我关注的一篇文章的链接
一个建议-与其将asp.net列表视图与JQueryajax混合,不如完全用JS构建列表视图(即表),然后使用ajax加载数据。
解决这个问题很容易。只看那部分(listView1.Height-26)/17;-listview。高度-26//26这是一列高度,17-这是列表视图中的行高度。当然,您可以使用自己的代码来计算此参数。
private const int SB_VERT = 1;
public void ScrollList() {
int items_on_page = (listView1.Height-26)/17;
ScrollEventArgs sarg = new ScrollEventArgs(ScrollEventType.EndScroll, GetScrollPos(this.Handle, SB_VERT));
items_count = listView1.Items.Count;
int scroll_pos = listView1.ScrollPosition;
int left_pos = items_count-scroll_pos;
if(left_pos<=items_on_page+2) {
// load more data into the listview
}
}
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
switch(m.Msg)
{
case WM_VSCROLL:
ScrollList();
break;
case WM_MOUSEWHEEL:
ScrollList();
break;
}
}