Matt によって投稿された問題に対するMarc Gravellのエレガントで機知に富んだ解決策(タイトル「C#/winforms: プロパティグリッドと System.Data.DataRow を最適にバインドする方法」) に出会い、私のアプリケーションの 1 つで同じ解決策を使用しました。 .
Marc のコードからの抜粋を使用します。
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Foo", typeof(int));
table.Columns.Add("Bar", typeof(string));
table.Columns.Add("Audit", typeof(DateTime));
table.Rows.Add(1, 14, "abc", DateTime.MinValue);
DataRow row = table.Rows.Add(2,13,"def", DateTime.MinValue);
table.Rows.Add(3, 24, "ghi", DateTime.MinValue);
RowWrapper wrapper = new RowWrapper(row);
wrapper.Exclude.Add("ID");
wrapper.Exclude.Add("Bar");
私はどういうわけかこれを DataGridView で機能させることができました。DataGridView はテーブルをソースとして使用しますが、DataGridView の行をクリックすると、(Marc の RowWrapper を使用して) propertyGrid1 の SelectedObject として設定され、完全に機能します。なぜこれを行うのか、つまり DataGridView と PropertyGrid の両方を使用するのかと尋ねるかもしれません。事実は、ビジネス要件と偏狭な管理ポリシーです。
とにかく、私は今別のジレンマを抱えています。テーブルの列の 1 つ、たとえば "Foo" など (PropertyGrid ではフィールドの 1 つとして表示されます) は、PropertyGrid のドロップダウン リストのようなものである必要があります。つまり、「Foo」は、別の DataTable から派生した項目のリストを含むコンボボックスでなければなりません。また、各フィールド項目に何らかの説明を含める方法はありますか?
これはできますか?Marc Gravell は、「この領域で他のことを行って、一部のプロパティを編集不可 (IsReadOnly) にしたり、別のキャプション (DisplayName)、またはカテゴリ (Category) にしたりすることができることに注意してください - RowWrapperDescriptor の他のメンバーをオーバーライドすることによって」 . "彼の投稿の最後のメモとして、私はこれを行う方法があるのだろうかと思っていました.
理論的なアドバイスは大歓迎です。どうもありがとう。