0

( .NET 2.0、System.Windows.FormsDataGridView および DataTable )

1 つのデータテーブルに接続された 1 つのデータグリッドがあります。

そのデータテーブルには 1 つの列が含まれています。自分のタイプ「MyObject」のオブジェクトが含まれています。
MyObject には、公開文字列プロパティ "MyProp" があります。

グリッドに 1 列を表示したい: テーブル内の MyObjects のプロパティ MyProp の文字列値を表示します。

しかし、私はそれを機能させることができないようです。

概略的に:

  • myTable.Column1.Name: "オブジェクト"
  • myDataSet には 1 つのテーブルが含まれています: myTable (いくつかの行で埋められています)
  • myBindingSource.datasource = myDataSet
  • myBindingSource.DataMember = myTable
  • myDataGridView.DataSource = myBindingSource
  • myDataGridView: 1 DataGridViewTextBoxColumn

  • トライアウト 1:

Column.DataPropertyName="Obj" (デフォルトで生成)

(オーバーライドされた) MyObject.ToString() の結果を表示します。本当に欲しいものではありません。この関数はログに使用されています。

  • トライアウト 2:

GridViewColumn.DataPropertyName="Obj.MyProp"

何も表示しません (MyProp のgetは呼び出されません)

  • 試行 3: MyProp プロパティをバインド可能にしました。

    [Bindable (BindableSupport.Yes)]
    public string MyProp
    { ...
    

    トライアウト2と同じ、変わらない

要するに:

GridViewColumn.DataPropertyName は、データテーブルの列内のオブジェクトへのドリルダウンをサポートしていないようです。

誰でもアイデアはありますか?

前もって感謝します!

1月

4

3 に答える 3

1

Obj.MyProp 文字列値をデータテーブル行に入れてみてください。そこにオブジェクトを配置するには、表示されている出力を取得する文字列表現 (Obj.ToString()) に変換する必要があります。

データテーブルはスプレッドシートによく似ており、Array(Of objects) とは異なります。あなたはそれをそのように扱わなければなりません。

于 2009-01-28T17:24:21.727 に答える
0

これは、OnRowDataBoundイベントを介して実行できます。

グリッドビューで

  1. onrowdataboundメソッドを宣言します

  2. テンプレートを使用

メソッドで:

  1. オブジェクトをつかむ

  2. 必要に応じてディスプレイにデータを入力または操作します

デフォルトのレイアウトの代わりにテンプレートを使用して、やりたいことを行うこともできます。

于 2009-01-28T18:07:25.527 に答える
0

データ ソースの直接のプロパティにのみバインドできます。の場合DataTable、これは列を意味します。次の 2 つのオプションが思い浮かびます。

  • 使用しないでくださいDataTable-List<MyObject>またはのみを使用してくださいBindingList<MyObject>
  • (または) オーバーライドMyObject.ToString()して返すMyProp

2 番目はあまり柔軟ではありません - 私は最初のものを使います。結局のところ、1 列DataTableは実際に何をしているのでしょう?

于 2009-01-28T18:01:07.427 に答える