1

こんにちはみんな私はサンプルのグリッドビューを持っていますここに画像の説明を入力

これが私がしたいことです。

フォームを開くと、サーバーから上位 100 件のデータをグリッドビューに読み込みます。下にスクロールしてスクロール バーの最後に到達したら、101 ~ 200 の別のデータをロードしたいので、グリッドビューのデータは 1 ~ 200 です。スクロール バーが最後に到達したかどうかを判断するにはどうすればよいですか?

4

3 に答える 3

4

使用している XtraGrid のバージョンによっては、InstantFeedback を確認する必要があります

行が表示されたときに行を動的に取得するデータソースです。

これの素晴らしい点は、それが標準の DevExpress コンポーネントであるため、自分で何かを発明する必要がないことです。

また:

次のようなものでその動作を強制できます。

    private bool _working = false;
    private void view_RowStyle(object sender, RowStyleEventArgs e)
    {
      if(_working) return;

      var view = sender as GridView;
      if (view != null)
      {
        int lastRowIndex = (view.GridControl.DataSource as BindingSource).Count;
        if (view.IsRowVisible(lastRowIndex) == RowVisibleState.Visible)
        {
          _working = true;
          //go get more rows.
          _working = false;
        }
      }
    }

これは、を使用していることを前提としていますBindingSource(使用していない場合は、キャスト タイプを変更する必要があります)。

RowStyleこのイベントのコードは「常時」実行されるため、イベントを処理します。

于 2013-03-18T07:00:29.283 に答える
2

ScrollGridControl の埋め込みスクロールバーのイベントを処理することで、スクロールを終了する (およびその他の条件を処理する) ことができます。
アプローチの詳細は次のとおりです。

var sb = GetScrollBar(gridControl1, ScrollBarType.Vertical);
sb.Scroll += new ScrollEventHandler(sb_Scroll);
//...
void sb_Scroll(object sender, ScrollEventArgs e) {
    var scrollBar = sender as DevExpress.XtraEditors.ScrollBarBase;
    if(e.NewValue == (scrollBar.Maximum - scrollBar.LargeChange)) {
        MessageBox.Show("Last row is reached!");
    }
}
ScrollBarBase GetScrollBar(GridControl gridControl, ScrollBarType type) {
    foreach(Control c in gridControl.Controls) {
        var scrollBar = c as ScrollBarBase;
        if(scrollBar != null && scrollBar.ScrollBarType == type)
            return scrollBar;
    }
    return null;
}
于 2013-03-18T08:22:36.450 に答える
1

表示された行数を取得し、ロードされた行の合計に基づいて計算し、TopRowChanged イベントをチェックして、さらに行をロードする必要があるかどうかを確認できます。これは、この状況に対するより手動のアプローチです。

また、これを行うサーバーモードでグリッドを使用することもできます。

よろしく、ミシュ

于 2013-03-18T07:15:34.507 に答える