2

次のトピックに関連する(または原因を言うことができます)私はListViewでスクロールイベントを処理できます:ListViewの スクロールイベントを作成する方法

私の場合、パフォーマンスへの影響を軽減するためにページネーションを使用せずに、単一のページに約 60k 行を表示するには、これが必要です。

私の質問は次のとおりです:スクロールイベントがトリガーされたら、これを処理する/データを動的にロードする最良の方法は何ですか?

現時点では、programm-start で約 100 行を読み込んでおり、スクロール トリガーごとに 1 行追加しています。バックグラウンドでは、単純な LIMIT-SQL ステージメントを使用しています。

正直なところ、これはあまりよく見えません (実際に何かがロードされていることがわかりますので、スムーズではありません)。アクセス検証エラーが発生する場合もあります。

では、そのようなことを行う一般的なアイデアは何でしょうか? 正しい方向に押し込む必要があるかもしれません:-)

ご協力ありがとうございます。

宜しくお願いします

4

2 に答える 2

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 に答える