I am working on a Windows Forms application and I have a grid view which lists all the users found in a database. Database looks like this:
table Users
table Privileges
Now, every user can have only one privilege, like Admin, or User etc, but I keep this info in a separate table and have a foreign key constraint defined in such way that an end user can't insert a user with a wrong privilege but rather, just from those which are found in Privileges table.
By the way, I am using Entity Framework and I have created my Model object using Database First method. But this likely doesn't affect on a question/answer because logic of what I am going to ask is probably the same, no matter how do you manipulate with data from database.
So, right now, I have two binding sources, one is called userBidningSource
, and other is privilegesBindingSource
. User model has a navigation property to Privileges and vice-versa (this is generated by EF). Now I have dragged a user data source from Data Sources menu, to my form, and wrote some code (in my form load) like this:
try{
context.user.Load();
this.userBindingSource.DataSource = context.user.Local.ToBindingList();
}catch(Exception ex){
Debug.Write(ex);
}
Now this works (I probably forgot to add all code, but until now everyhing works) and I get a list of all users with all the columns from a Users table.
Now because it is unsafe and doesn't make sense to leave to the end user to choose/guess what privilege_id field should be entered, I made a combobox on a grid view for that column.
So I added something like this in my code:
context.privileges.Load();
this.privilegesBindingSource.DataSource = context.user.Local.ToBindingList();
Also I have set data source of this column in a designer (right click on a grid view , then Edit Columns) to the privileges datasource.
Now all drop downs are filled as it should.
The Problem
Finally, the problem... Right now, I am trying to add a new row. So if I click on + icon of a grid view, I get an error which says :
"DataGridViewComboBoxCell value is not valid. To replace this default dialog please handle the DataError event."
So the question is, how to add a row with a current setup ? What I am doing wrong?
Try adding the event DataError by going to the dataGridView properties and leave the function body empty/blank.