0

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 の他のメンバーをオーバーライドすることによって」 . "彼の投稿の最後のメモとして、私はこれを行う方法があるのだろうかと思っていました.

理論的なアドバイスは大歓迎です。どうもありがとう。

4

1 に答える 1

0

返信ありがとうございます。

こんな感じです; ビジネス要件に次の DataTable 設定があると仮定します。

DataTable table = new DataTable();

table.Columns.Add("ID", typeof(int));
table.Columns.Add("MedSequence", typeof(int));
table.Columns.Add("Prognosis", typeof(string));
table.Columns.Add("RBC", typeof(string));
table.Columns.Add("WBC", typeof(string));
table.Columns.Add("BP Normal", typeof(bool);
table.Columns.Add("Histology", typeof(string));

DataRow row = table.Rows.Add(559,6845,"Progressive decline","54–62pcnt","6.1 million/uL",true,"Haematoxylin");

dataGridView1 のデータソースを「テーブル」に設定し、datagridview の cellcontentclick ごとに、propertyGrid1 の SelectedObject を dataGridView の「現在の」選択行に設定します。ある意味では、dataGridView1 は MedSequence と Prognosis の 2 つの列のみを表示する必要があり、DataTable テーブルの残りの列はユーザ​​ーには表示されません。

ただし、propertyGrid1 はテーブル内のすべての列をプロパティとして表示する必要があります。したがって、意図された効果は、(MedSequence 列と Prognosis 列の) 表示手段としての DataGridView に対するものであり、他のテーブル値の編集は propertyGrid1 によって処理されます。

私の投稿で述べたように、現時点では、RowWrapper クラスを使用すると、完全に機能します。ただし、表の列の 1 つである "Histology" については、propertyGrid1 は次のリストを含む編集可能なドロップダウン リストを表示する必要があります。 }。基本的に、経営陣はデータベースからクエリされた値をこのドロップダウン リストに入力することを考えていました (これはおそらく私たちがやろうとしていることです) が、基本的に私の問題は、propertyGrid1 の "Histology" フィールドをドロップになるようにすることです。ダウンリスト。propertyGrid1 はデータテーブルの列から派生したフィールドのラッパーを使用しているため、何をすべきか途方に暮れています。

Histology の DataGridView 列をドロップダウンに変更したとしても、前述のようにテーブルの 2 つの列 ( MedSequence と Prognosis ) のみが表示され、他のすべての列はヒストロジーは、propertyGrid1 のドロップダウン値リストとして表示される必要があるため、特殊なケースです。

于 2010-02-15T01:18:23.037 に答える