こんにちはみんな私はサンプルのグリッドビューを持っています
これが私がしたいことです。
フォームを開くと、サーバーから上位 100 件のデータをグリッドビューに読み込みます。下にスクロールしてスクロール バーの最後に到達したら、101 ~ 200 の別のデータをロードしたいので、グリッドビューのデータは 1 ~ 200 です。スクロール バーが最後に到達したかどうかを判断するにはどうすればよいですか?
こんにちはみんな私はサンプルのグリッドビューを持っています
これが私がしたいことです。
フォームを開くと、サーバーから上位 100 件のデータをグリッドビューに読み込みます。下にスクロールしてスクロール バーの最後に到達したら、101 ~ 200 の別のデータをロードしたいので、グリッドビューのデータは 1 ~ 200 です。スクロール バーが最後に到達したかどうかを判断するにはどうすればよいですか?
使用している 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
このイベントのコードは「常時」実行されるため、イベントを処理します。
Scroll
GridControl の埋め込みスクロールバーのイベントを処理することで、スクロールを終了する (およびその他の条件を処理する) ことができます。
アプローチの詳細は次のとおりです。
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;
}
表示された行数を取得し、ロードされた行の合計に基づいて計算し、TopRowChanged イベントをチェックして、さらに行をロードする必要があるかどうかを確認できます。これは、この状況に対するより手動のアプローチです。
また、これを行うサーバーモードでグリッドを使用することもできます。
よろしく、ミシュ