0

通常は直面することさえない問題に行き詰まっていますが、この場合は大したことのようです.

まず、混乱を避けるために、タイトルにも書きましたが、ここでは Windows Forms (WPF や Web 関連アプリケーションではありません) について話しています。

データソースがエンティティのナビゲーション プロパティ (エンティティ フレームワーク 5、コード ファースト) に由来する DataGridView があります。

このデータグリッドには、他のフィールドの中でも、「IdEquipment」と「IdConfiguration」があります。どちらの列も DataGridViewComboBoxEditingControl 型です。IdEquipment は、「Equipment」という BindingSource コントロールによって設定されます。

 _context.Equipments.Local.ToBindingList();

外部キー「IdEquipment」としての「構成」テーブルとコンボボックスは、データグリッドの各行でこのテーブルのサブセットをどのようにする必要があります。それを行うには、いくつかの失敗したテストと SO および他の場所での検索の後、特にとに焦点を当てたこの解決策を見つけました。dataGridView1_EditingControlShowingdataGridView1_CellValueChanged

それは正しい方向のようですが、問題は IdEquipment コンボボックスのデータソースをフィルター処理するときです (これは、 にバインドされた別の BindingSource コントロールでもあります) _context.Configurations.Local.ToBindingList();

私はエンティティを扱っているので、.ToList()ではなくを呼び出すことになっているとどこかで読んだことがあります.ToBindingList()が、この場合でも、フィルタリングは行われません (とにかく、BindingList はまだ問題ないと思います)。

私が使用できる別のオプションは、最初のコンボボックスの選択された値/エンティティを利用して、Equipment.Configuration ナビゲーション プロパティを取得することですが、DataGridViewComboBoxEditingControl でそれを行う方法がわかりません。

何か助けはありますか?

4

1 に答える 1

1

さらに数時間苦労した後、私は最終的に自分のニーズに最適な解決策を見つけました。しかし、これが解決策であるかどうかはわかりません。

  • コンボボックスで使用されるすべてのBindingSourceコントロールを削除しました。
  • DataGrid DataBindingCompleteイベントの場合:フィルター処理されていないリストを使用して両方のコンボのデータソースを構成し、DisplayMemberプロパティとDisplayValueプロパティを設定します(両方のリストに最初の「null」要素があります)。
  • DataGrid EditorialControlShowingイベントの場合:IdEquipementの現在の値(存在する場合)に基づいてフィルター処理されたリストを使用して2番目のコンボのデータソースを変更し、最初のnull要素を保持します。
  • DataGrid CellValueChangedイベントの場合:変更された列ID IdEquipementの場合、IdConfigurationを含む列の値をnullに設定します

これは、これまでのところ機能します。同じ結果をより簡単に達成できることを望んでいましたが、私が見る限り、選択肢はありません。

于 2013-03-07T13:23:23.597 に答える