在listview-scroll上加载数据

时间:2013-08-20 15:21:35

标签: c# sql listview

与以下主题相关(或者说由于)我能够处理ListView中的滚动事件: How to make scroll event for ListView

在我的情况下,我需要在单页上显示大约6万行,而不使用分页来降低性能影响。

我现在的问题是:滚动事件触发后,动态加载数据的最佳方法是什么?

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

说实话,这看起来并不是很好(你实际上可以看到有些内容正在加载,所以它并不顺利)有时它似乎会导致一些访问验证错误。

那么做这些事情的基本想法是什么?我可能需要向正确的方向推进: - )

感谢您的协助。

祝你好运 Teyhouse

2 个答案:

答案 0 :(得分:1)

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

以下是我跟随的article的链接

建议 - 如果你在JS中完全构建listview(即表),然后使用AJAX加载数据,那么不如将asp.net列表视图与JQuery ajax混合在一起。

答案 1 :(得分:0)

解决这个问题很容易。只看一下那部分 (listView1.Height-26)/ 17; - listview.Height - 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;
     }
}