WinFormsアプリケーションの次のシナリオでデータグリッドをバインドするための最良の戦略は何ですか。たとえば、テーブルを含む強く型付けされたデータセットがあるとします。
Table1 (T1_ID, T1_VALUE) <--* Table2 (T2_ID, T1_ID, T2_VALUE) <--* Table3(T3_ID, T2_ID, T3_VALUE)
データグリッドをTable3にバインドし、Table2とTable1のフィールドを表示し、すべての列でフィルタリング、並べ替える機能が必要です。
T3_VALUE | T2_VALUE | T1_VALUE
そのような場合の一般的なバインディングアプローチは何ですか?
次の選択肢があります。
計算列を追加します。
Table2.T1_VALUE = PARENT(T2_T1).T1_VALUE
Table3.T2_VALUE = PARENT(T3_T2).T2_VALUE
Table3.T1_VALUE = PARENT(T3_T2).T1_VALUE
ここで、T2_T1、T3_T2-リレーション名。
これは正しい方法のようですが、UIの目的でのみ必要な冗長な計算列でクリーンなデータモデルを汚染することを懸念しています(コード内の他の場所ではまだ使用します)Table3Row.Table2Row.Table1Row.T1_VALUE
Linqを使用してデータセットをクエリし、さまざまなテーブルから列を取得します。ただし、この場合、グリッドはデータをtable3に書き込んだり、並べ替えたりすることはできません。
グリッドをTable3にバインドし、セルをレンダリングするイベントを処理し、そこで親テーブルから値を出力します。グリッドはTable3に書き込むことはできますが、並べ替えることはできません(syncfusionグリッドを使用していますが、違いはないと思います)
複数のテーブルのデータを表示できるビューを実装し、メインテーブルを更新します。私はこの方向に掘りませんでした、それはあまりにも複雑なようです。出来ますか?
私が指摘したように、計算列を使用するとすべての問題が解決され、それを解決する最も簡単な方法のようです。しかし、もっとエレガントで正しいアプローチがあるかもしれません。