これに関する投稿がいくつかありますが、何時間も検索した後でも、必要なものが見つかりません。
次の投稿の答えは、私が望むものをほとんど手に入れます: DataGridView の外部キーのコンボボックス
質問1:
製品に多くのライセンスがある例から離れて、私のデータベース マッピングはすべて多対 1 の関係です。これは、私のライセンス クラスが製品クラスへの参照を保持していることを意味します。License クラスには ProductId のプロパティがありません。これは、Product 参照を介して取得できるためです。UI でのバインディングを簡単にするためだけに、Product への参照と ProductId プロパティの両方を使用して License クラスを台無しにしたくありません。
DataPropertyName
このため、 を Id フィールドに設定できません。次のようなクラス参照名である必要があります。
DataGridViewComboBoxColumn dataGridViewComboBoxColumn =
(DataGridViewComboBoxColumn)myDataGridView.Columns("LicenseComboBoxColumn");
dataGridViewComboBoxColumn.DataPropertyName = "License"; // not LicenseID
****更新**** 次のように DataPropertyName として Product.Id を指定することで、ProductId プロパティを作成せずにこれを部分的に機能させることができました。
dataGridViewComboBoxColumn.DataPropertyName = "License.Id";
ただし、そうすると、データバインディングが壊れて、セル値を手動で取得して設定する必要がありました。
DataGridView セルへのバインディングに関する投稿も見ましたが、それを行うとデータバインディングが壊れ、データソース自体が更新されません。
// populate the combo box with Products for each License
foreach (DataGridViewRow row in myDataGridViewProducts.Rows)
{
IProduct myProduct = row.DataBoundItem as IProduct;
DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)row.Cells("myProductCol");
cell.DataSource = getListOfILicenseObjectsFromDao(myProduct.Id);
cell.Value = myProduct.License.Id;
}
やり方が間違っているのかもしれませんし、やり方が違うのかもしれません。誰でもここで助けることができますか?
質問2:
製品ごとに異なるライセンスのリストを表示するにはどうすればよいですか? つまり、ライセンスのコンボボックス リストは、グリッド内の製品ごとに異なります。データバインディングを使用してこれを行いたいので、自分で値を取得して設定する必要はありません。