0

私は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イベントを処理してください。」

問題は、現在の設定で行を追加する方法です。私が間違っていることは何ですか?

答えて

1

てみてください。

+0

今これはそれを解決しました。説明していただけますか? – Whirlwind

+0

https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.dataerror(v=vs.110).aspx。このドキュメントを参照してください。それは助けるかもしれない –

1

DisplayMemberValueMemberのプロパティを設定する必要があります。新しい行が追加されると、その知識がコンボボックスに入力されます。メソッドを追加して、新しい行が要求されたときにハンドラを呼び出して、新しい行のデフォルト値を指定できるようにすることもできます。あなたはDefaultValuesNeededイベントにイベントハンドラを追加して、例えば、このようなデフォルト値を指定することができます。DataGridViewのプロパティに行くと、ブランク/空の関数本体を残すことにより、イベントDataErrorを追加

private void dataGridView1_DefaultValuesNeeded(object sender, 
    System.Windows.Forms.DataGridViewRowEventArgs e) 
{ 
    e.Row.Cells["Region"].Value = "WA"; 
    e.Row.Cells["City"].Value = "Redmond"; 
    e.Row.Cells["PostalCode"].Value = "98052-6399"; 
    e.Row.Cells["Country"].Value = "USA"; 
    e.Row.Cells["CustomerID"].Value = NewCustomerId(); 
} 
+0

応答ありがとう!今夜私はコンピュータを手にするとすぐに試してみる... – Whirlwind

+0

私はちょうどチェックした。私は実際にはDisplayMember(privilege_name)とValueMember set(主キーであるprivilege_id)を設定します。今私は本当にデフォルト値が必要かどうかわかりません。私はそれらすべてを空にしたい。また、既定値で行を移入したときも同じエラーが発生しました。それは私のセットアップで何か明白でなければなりません...? – Whirlwind

+0

デフォルトの偶数ハンドラのコンボボックスのデフォルトを設定し、問題が修正されているかどうかを確認してください。 – CodingYoshi

関連する問題