2

与以下主题相关(或者说由于)我能够在我的 ListView 中处理滚动事件: 如何为 ListView 制作滚动事件

在我的情况下,我需要它在单个页面上显示大约 60k 行,而不使用分页来减少性能影响。

我现在的问题是:一旦滚动事件触发......处理这个/动态加载我的数据的最佳方法是什么?

目前我在 programm-start 上加载大约 100 行,并在每个滚动触发器上添加一行。在后台,我使用了一个简单的 LIMIT-SQL 阶段。

老实说,这看起来不太好(您实际上可以看到正在加载某些东西,所以它并不流畅),有时它似乎会导致一些访问验证错误。

那么做这些事情的一般想法是什么?我可能需要朝着正确的方向努力:-)

感谢你的协助。

最好的问候

4

2 回答 2

1

几个月前我做了一些这样的事情。因此,诀窍始终是加载 N 行而不是 1 行,因为当滚动即将结束时,效率会非常低(就像 FB 和谷歌阅读器所做的那样)。所以在你的情况下,当你的滚动即将结束时,总是加载 100 行。

这是我关注的 1篇文章的链接

一个建议 - 不要将 asp.net 列表视图与 JQuery ajax 混合,如果您完全在 JS 中构建您的列表视图(即表)然后使用 AJAX 加载数据会很好。

于 2013-08-20T15:38:45.000 回答
0

这个问题的解决很容易。仅查看该部分 (listView1.Height-26)/17; - listview.Height - 26 // 26 它的列高度,17 - 这是我 listView 的行高度。当然,您可以使用自己的代码计算此参数。

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;
     }
}
于 2014-04-09T07:29:04.363 回答