私は Windows フォーム アプリケーションで作業しており、データベースで見つかったすべてのユーザーを一覧表示するグリッド ビューを持っています。データベースは次のようになります。
表 ユーザー
表の権限
現在、すべてのユーザーは Admin や User などの 1 つの権限のみを持つことができますが、この情報を別のテーブルに保持し、エンド ユーザーが間違った権限を持つユーザーを挿入できないように外部キー制約を定義しています。むしろ、特権テーブルにあるものからだけです。
ところで、私は Entity Framework を使用しており、Database First メソッドを使用して Model オブジェクトを作成しました。しかし、データベースからのデータをどのように操作しても、私が尋ねようとしていることのロジックはおそらく同じであるため、これはおそらく質問/回答には影響しません。
したがって、現在、2 つのバインディング ソースがあり、1 つは と呼ばれuserBidningSource
、もう 1 つは ですprivilegesBindingSource
。ユーザー モデルには、特権へのナビゲーション プロパティとその逆のナビゲーション プロパティがあります (これは EF によって生成されます)。ここで、ユーザー データ ソースを [データ ソース] メニューからフォームにドラッグし、(フォーム ロードで) 次のようなコードを記述しました。
try{
context.user.Load();
this.userBindingSource.DataSource = context.user.Local.ToBindingList();
}catch(Exception ex){
Debug.Write(ex);
}
これで機能し (おそらくすべてのコードを追加するのを忘れていましたが、今まではすべて機能していました)、Users テーブルのすべての列を含むすべてのユーザーのリストを取得します。
これは安全ではなく、エンド ユーザーに入力する特権 ID フィールドの選択/推測を任せるのは意味がないため、その列のグリッド ビューにコンボボックスを作成しました。
そこで、コードに次のようなものを追加しました。
context.privileges.Load();
this.privilegesBindingSource.DataSource = context.user.Local.ToBindingList();
また、デザイナーでこの列のデータ ソースを設定しました (グリッド ビューを右クリックし、[列の編集]) を特権データ ソースに設定しました。
これで、すべてのドロップダウンが正常に入力されました。
問題
最後に、問題は...現在、新しい行を追加しようとしています。したがって、グリッド ビューの + アイコンをクリックすると、次のようなエラーが表示されます。
「DataGridViewComboBoxCell 値が無効です。このデフォルト ダイアログを置き換えるには、DataError イベントを処理してください。」
問題は、現在のセットアップで行を追加する方法です。私が間違っていることは何ですか?