c# - 通过单击 DataGridView 中的“添加”按钮添加行

标签 c# mysql datagridview entity-framework-6 visual-studio-community

我正在开发 Windows 窗体应用程序,并且有一个 GridView ,其中列出了数据库中找到的所有用户。数据库如下所示:

表格用户

表权限

现在,每个用户只能拥有一种权限,例如管理员或用户等,但我将此信息保存在一个单独的表中,并定义了一个外键约束,最终用户无法使用以下方式插入用户错误的权限,而是仅来自权限表中找到的权限。

顺便说一下,我正在使用 Entity Framework ,并且我已经使用数据库优先方法创建了模型对象。但这可能不会影响问题/答案,因为无论您如何操作数据库中的数据,我要问的逻辑可能是相同的。

所以,现在我有两个绑定(bind)源,一个称为 userBidningSource,另一个是 privilegesBindingSource。用户模型具有到权限的导航属性,反之亦然(这是由 EF 生成的)。现在,我已将用户数据源从“数据源”菜单拖到我的表单中,并编写了一些代码(在我的表单加载中),如下所示:

try{
   context.user.Load();
   this.userBindingSource.DataSource = context.user.Local.ToBindingList();

}catch(Exception ex){
    Debug.Write(ex);
}

现在这可以工作了(我可能忘记添加所有代码,但到目前为止一切正常),我得到了所有用户的列表,其中包含用户表中的所有列。

现在,因为它不安全,并且让最终用户选择/猜测应该输入什么privilege_id字段是没有意义的,所以我在该列的 GridView 上创建了一个组合框。

所以我在代码中添加了这样的内容:

 context.privileges.Load();
       this.privilegesBindingSource.DataSource = context.user.Local.ToBindingList();

此外,我已在设计器中将此列的数据源(右键单击 GridView ,然后“编辑列”)设置为权限数据源。

现在所有下拉菜单都已按预期填充。

问题

最后,问题...现在,我正在尝试添加新行。因此,如果我单击 GridView 的 + 图标,我会收到一条错误消息:

"DataGridViewComboBoxCell value is not valid. To replace this default dialog please handle the DataError event."

所以问题是,如何添加具有当前设置的行?我做错了什么?

最佳答案

尝试通过转到 dataGridView 属性来添加事件 DataError 并将函数主体保留为空/空白。

关于c# - 通过单击 DataGridView 中的“添加”按钮添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44088708/

相关文章:

c# - LINQ 加入以查找不在列表中的项目

mysql - 异地数据库服务器

mysql - 我可以将 MySQL 中的外连接的空值替换为文本吗

c# - DataGridView多行选择鼠标左键拖放清除

c# - 检查滚动条是否在数据 GridView 中可见

c# - 超时后阻止来自 C# NetworkStream 的传入数据

c# - TimeZoneInfo.ConvertTimeFromUtc 返回不正确的结果

c# - 使用 Interop 库创建 Web 服务器端 Excel

mysql - 根据排名返回Sql结果

winforms - 如何刷新 WinForms DataGridView 上的数据源?