1

フォームを開くと、DataGridView にバインドされている DataSet に一連の行を追加しています。後で、DataGridView で行を列挙するときに、DataSet に入力するために使用されたが、適切な DataSet に格納されていないデータの一部にアクセスしたいと考えています。

このようなもの:

public void OnStartup()
{
  foreach (var data in GetData())
  {
    var row = MyDataSet.MyTable.AddRow(data.Value);

    // here's the part where I'm not sure what to do.. ideally:
    row.GetDataGridViewRow().Tag = data.Metadata;
  }
}

public void LaterOn()
{
  foreach (var row in MyDataGridView.GetSelected())
  {
     var metadata = (Metadata)row.Tag;  // or something
     ...
  }
}

一部のメタデータを DataSet または DataGridView 行に添付する最良の方法は何ですか?

4

1 に答える 1

1

これは、単一の「正しい」方法がなく、ケースバイケースでアプローチを選択するだけの問題である状況の 1 つです。

DataGridView Tagこのようにプロパティを使用しても問題はありません。実際、MSDN で述べられているように、それが目的です。

Tag プロパティには、バンドに関連付ける任意のオブジェクトを格納できます。通常、このプロパティは、文字列名、一意の識別子 (Guid など)、データベース内のバンドのデータのインデックスなどの識別情報を格納するために使用されます。


私が検討する代替案の 1 つはBindingList<T>、カスタム バッキング オブジェクトをDataSourcea ではなくとして使用しDataSet、メタ データをバッキング オブジェクトに格納することです。DataGridViewRowその後、のDataBoundItemプロパティを使用して各オブジェクトにアクセスできます。

データと UI をもう少し分離し、バッキング オブジェクトしかない場合でもメタデータを取得できることを意味するため、この方法をわずかに好むと思いますが、パフォーマンスやメモリの点で具体的な違いがあるとは思えません。利用方法。

于 2012-07-16T17:27:49.143 に答える