私はWindowsフォームアプリケーションで作業しています。データベースにあるすべてのユーザーを一覧表示するグリッドビューがあります。DataGridViewの[追加]ボタンをクリックして行を追加する
テーブルの権限が
今、すべてのユーザーが1人の管理者のみのような権限、またはユーザーなどを持つことができますが、私は別のにこの情報を保つ
テーブルユーザー:データベースは、次のようになりますエンド・ユーザーが間違った特権を持つユーザーを挿入することはできず、Privileges表にあるものから挿入するだけの外部キー制約が定義されています。
ところで、私はEntity Frameworkを使用しており、Model Firstオブジェクトを使用してModelオブジェクトを作成しました。しかし、これは質問/回答には影響しません。なぜなら、私が尋ねようとしていることの論理は、データベースのデータをどのように操作しても、おそらく同じであるからです。
今、私は2つのバインディングソースを持っています.1つはuserBidningSource
、もう1つはprivilegesBindingSource
です。ユーザーモデルにはPrivilegesのナビゲーションプロパティがあります(これはEFによって生成されます)。今、私は自分のフォームに、データソース]メニューから[ユーザーデータソースをドラッグし、このように(私のフォーム負荷で)いくつかのコードを書いている:
try{
context.user.Load();
this.userBindingSource.DataSource = context.user.Local.ToBindingList();
}catch(Exception ex){
Debug.Write(ex);
}
さて、この作品(私はおそらく、すべてのコードを追加するのを忘れたが、今まではすべての作業が完了しています)、Usersテーブルのすべての列を持つすべてのユーザーの一覧が表示されます。
安全でないため、どのprivilege_idフィールドを入力すべきかをエンドユーザーに任せてはいけないので、その列のグリッドビューでコンボボックスを作成しました。
だから私は私のコードでこのような何かを追加しました:
context.privileges.Load();
this.privilegesBindingSource.DataSource = context.user.Local.ToBindingList();
また、私はデザイナーで権限データソースに(右の列を編集した後、グリッドビューをクリックする)この列のデータソースを設定しています。
ここで、すべてのドロップダウンが必要に応じて埋められます。
問題
最後に、問題が...今、私は新しい行を追加しようとしています。だから私は、グリッドビューの+アイコンをクリックすると、私はというエラーを取得:「DataGridViewComboBoxCell値が有効ではありません。このデフォルトに ダイアログを置き換えるためにDataErrorイベントを処理してください。」
を
問題は、現在の設定で行を追加する方法です。私が間違っていることは何ですか?
今これはそれを解決しました。説明していただけますか? – Whirlwind
https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.dataerror(v=vs.110).aspx。このドキュメントを参照してください。それは助けるかもしれない –