在列表视图滚动中加载数据

本文关键字:加载 数据 滚动 列表 视图 | 更新日期: 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;
     }
}