0

WinGrid (WinForms プロジェクト) の近くにあるラベルの行数を更新する必要があります。

グリッドの更新は、データソースの変更、手動の追加/削除、SQL の初期化など、さまざまな方法で行われます。

グリッドが行番号を変更したときに発生する普遍的なイベントはありますか (データソースの変更を含む)?

4

3 に答える 3

2

BindingListやDataSet/DataTableなどの変更通知があるリストにバインドしていると仮定します。グリッドがデータソースからのイベントに依存して更新が必要であることを認識しているため、データソースにアイテムを追加し、それらがグリッドに表示される場合は、これが当てはまる必要があります。

その場合、グリッドがバインドされているリストのListChangedイベントにバインドできます。このイベントは、IBindingListインターフェイスの一部です。

DataTable / DataSetにバインドする場合は、DataTableのDefaultViewによって公開されるイベントを使用する必要があります。これは、IBindingListを実装し、グリッドが実際にバインドするものだからです。

IBindingListではなくINotifyCollectionChangedを実装するコレクションを使用している場合は、CollectionChangedイベントを使用します。これは、ObservableCollectionが変更通知に使用するものであるため、WPF開発を行っている場合に発生する可能性が高くなります。

于 2013-03-21T17:34:20.373 に答える
0

私の経験ではありません。行番号が変更されたときに呼び出されるグローバルイベントはありません。
これに対する私の最善の解決策は、表示される行の数を変更する可能性のあるさまざまなイベントから呼び出される汎用メソッドです。

このようなもの

private void UpdateRowsCount(UltraGrid grd, string messageFmt = "Rows count: {0}")
{
    labelRowCount.Text = string.Format(messageFmt, grd.Rows.FilteredInRowCount);
}

次に、処理する必要のあるイベント:

  • grd_AfterRowFilterChanged //フィルタリングを有効にしている場合は、これを忘れないでください
  • grd_AfterRowsDeleted
  • grd_AfterRowInsert

そしてもちろん、データソースを設定した後。

 grd.DataSource = myDataTable;
 this.UpdateRowsCount(grd, "Customers count: {0}");

誰かが問題についてよりよく知っているなら、私は別のアプローチに非常に興味があります。

于 2013-03-21T10:44:32.603 に答える
0

最後に、行をグリッドに追加する場所を手動で特定し、それに応じてカウント ラベルを更新しました。

そのため、Grid イベントは使用しませんでした。

于 2013-03-27T14:47:05.277 に答える