0

似たような質問がたくさんあることを知っており、可能な解決策を探すのに多くの時間を費やしました. しかし、それを行う最も簡単な方法が何であるかはまだわかりません。

目標は、LogItems(タイムスタンプ、重大度レベル、メッセージ) をDataGridViewタイムスタンプで並べ替えて表示し、ユーザーが重大度レベルでアイテムをフィルター処理できるようにすることです。

これがまさに私が(必要としない)必要なものです:

  • DataGridViewオブジェクトのリスト/コレクションへの一方向データバインディング。ユーザーがオブジェクトを編集しDataGridViewたり、オブジェクトを追加/削除したりする必要はありませんDataGridView。ただし、DataGridViewその基になるリスト/コレクションにオブジェクトを追加または削除すると、自動的に更新されるはずです。
  • オブジェクトにはタイムスタンプ ( DateTime) があり、このタイムスタンプ順に表示する必要があります。リスト自体がそれらをソートしたままにするかどうか (のようなものがSortedList<T>あればいいのですが、存在しません)、または がソートを処理するかどうかDataGridViewBindingSource気にしません。ユーザーが列ヘッダーをクリックして並べ替えを設定する必要はありません。
  • 1 つの列の値 (重大度) に基づく単純なフィルター処理。

ここで私が思いついたいくつかのアプローチ:

  • BindingList<T>並べ替えとフィルタリングをサポートしていないため、基になるコレクションが機能しないため、a を使用します。
  • BindingSource基になるコレクションが並べ替えとフィルター処理をサポートしていない場合、一部のコレクションを でラップしても役に立ちません。
  • を実装するカスタム コレクションを作成しますIBindingListView。これは非常に複雑に見えますが、提供される機能のサブセットのみが必要ですIBindingListView。そして、私は怠け者です。
  • BindingListView sourceforge プロジェクトを使用します。これはおそらく私が必要とするものに対して重すぎるので、サードパーティのライブラリに頼る必要がなければ頼りたくありません。

これに対する簡単で迅速な解決策は何でしょうか?

4

2 に答える 2

1

DataTable を使用することをお勧めします。必要なものはすべて手に入ります。

ユーザーが編集できないようにするには、DataGridView を ReadOnly にするだけです。基になる DataTable が更新されると、引き続き更新されます。

乾杯

于 2013-09-19T21:18:33.527 に答える
0

を使用するDataTableこともできますが、最終的にはBindingListViewfrom sourceforgeを代わりに使用することにし、非常に満足しています。

このアプローチの問題はDataTable、カスタム オブジェクトからすべてのデータDataTableを表示するためだけにコピーする必要があることです。

于 2013-10-02T05:43:47.143 に答える