2013-08-20 46 views
2

有關(或因爲讓說)以下主題,我能夠在我的ListView來處理滾動事件: How to make scroll event for ListView加載數據

在我來說,我需要這個來顯示60k行不使用分頁來減少性能影響。

我現在的問題是:什麼是最好的方式來處理/ /一旦滾動事件觸發動態加載我的數據...?

目前我在programm-start上加載約100行,並在每個滾動觸發器上添加一行。在後臺我使用了一個簡單的LIMIT-SQL管理。

說實話,這看起來不太好(你實際上可以看到一些beeing加載,所以它不光滑),有時它似乎會導致一些訪問驗證錯誤。

那麼這樣做會產生什麼結果呢?我可能需要一些正確的方向:-)

感謝您的幫助。

問候 Teyhouse

+0

請看[My example](http://stackoverflow.com/a/16745054/643085)的一個類似的東西。 –

回答

1

我做的這幾個月一些東西回來。所以這個技巧總是加載N行而不是1行,因爲當滾動即將結束時,它會非常低效(就像FB和谷歌閱讀器一樣)。所以在你的情況下,當你的滾動即將結束時,總是加載100行。

這裏是1 article鏈接,我跟着

的建議 - 而不是混合asp.net列表視圖中使用jQuery阿賈克斯,如果你建立你的列表視圖(如表)全部用JS,然後它會很高興使用AJAX加載數據。

+0

感謝您的回覆,我會這樣做,但我不使用ASP.NET這是一個簡單的表格應用程序,我應該告訴之前,對不起...我在我的方式來處理數據我犯了一些錯誤我在列表視圖的每個向下滾動中加載新行......似乎是一個更好的主意,一旦達到列表視圖的末尾就加載數據... – Teyhouse

+0

是的,這就是訣竅! – Anand

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; 
    } 
}