Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过单击DataGridView中的Add按钮添加行_C#_Mysql_Datagridview_Entity Framework 6_Visual Studio Community - Fatal编程技术网

C# 通过单击DataGridView中的Add按钮添加行

C# 通过单击DataGridView中的Add按钮添加行,c#,mysql,datagridview,entity-framework-6,visual-studio-community,C#,Mysql,Datagridview,Entity Framework 6,Visual Studio Community,我正在使用Windows窗体应用程序,我有一个网格视图,其中列出了在数据库中找到的所有用户。数据库如下所示: try{ context.user.Load(); this.userBindingSource.DataSource = context.user.Local.ToBindingList(); }catch(Exception ex){ Debug.Write(ex); } 表格用户 表格特权 现在,每个用户只能有一个权限,比如Admin或user等,但我将这些

我正在使用Windows窗体应用程序,我有一个网格视图,其中列出了在数据库中找到的所有用户。数据库如下所示:

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

}catch(Exception ex){
    Debug.Write(ex);
}
表格用户

表格特权

现在,每个用户只能有一个权限,比如Admin或user等,但我将这些信息保存在一个单独的表中,并定义了一个外键约束,这样最终用户就不能插入具有错误权限的用户,而只能插入特权表中的用户

顺便说一下,我使用的是实体框架,我已经使用数据库优先方法创建了我的模型对象。但这可能不会影响问题/答案,因为我要问的逻辑可能是相同的,无论您如何处理数据库中的数据

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

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

}catch(Exception ex){
    Debug.Write(ex);
}
现在它可以工作了(我可能忘了添加所有代码,但直到现在everyhing都可以工作),我从users表中获得了一个包含所有列的所有用户的列表

现在因为它是不安全的,让最终用户来选择/猜测应该输入什么privilege\u id字段没有意义,所以我在网格视图中为该列创建了一个组合框

因此,我在代码中添加了如下内容:

 context.privileges.Load();
       this.privilegesBindingSource.DataSource = context.user.Local.ToBindingList();
我还在设计器中将此列的数据源(右键单击网格视图,然后编辑列)设置为特权数据源

现在,所有下拉列表都按其应该的方式填充

问题

最后,问题是。。。现在,我正在尝试添加新行。因此,如果我单击网格视图的+图标,我会得到一个错误,上面写着:

“DataGridViewComboxCell值无效。若要替换此默认值 对话框,请处理DataError事件。“

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

您需要设置和属性,以便在添加新行时,它将使用这些知识填充组合框。您可能还希望添加一个方法,以便在请求新行时,它将调用您的处理程序,以便您可以指定新行的默认值。您可以将事件处理程序添加到
defaultvaluesneed
事件中,并指定如下默认值,例如:

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();
} 
您需要设置和属性,以便在添加新行时,它将使用这些知识填充组合框。您可能还希望添加一个方法,以便在请求新行时,它将调用您的处理程序,以便您可以指定新行的默认值。您可以将事件处理程序添加到
defaultvaluesneed
事件中,并指定如下默认值,例如:

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();
} 

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

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

哦,谢谢你的回复!今晚我一拿到电脑就试试……我刚检查过。我实际上显示了member(privilege\u name)和ValueMember集(privilege\u id,它是主键)。现在我真的不知道我是否想要默认值。我要那些空的。另外,当我用默认值填充行时,我也遇到了相同的错误。在我的设置中一定有一些明显的东西?尝试在默认偶数处理程序中设置组合框的默认值,看看这是否解决了问题。我仍然得到的DataGridViewComboxCell值无效。我在偶数处理程序中执行了此操作:`e.Row.Cells[“privilegesidDataGridViewTextBoxColumn1”].Value=aDefaultValue;如果这解决了问题,那就意味着出现了一些错误,这个错误让你提出了这个问题,现在加上
DataError
基本上消除了这个错误。因此错误并没有消失,只是被忽略了,它可能以另一种格式出现。你应该看到确切的错误是什么,如图所示哦,谢谢你的回复!今晚我一拿到电脑就试试……我刚检查过。我实际上显示了member(privilege\u name)和ValueMember集(privilege\u id,它是主键)。现在我真的不知道我是否想要默认值。我要那些空的。另外,当我用默认值填充行时,我也遇到了相同的错误。在我的设置中一定有一些明显的东西?尝试在默认偶数处理程序中设置组合框的默认值,看看这是否解决了问题。我仍然得到的DataGridViewComboxCell值无效。我在偶数处理程序中执行了此操作:`e.Row.Cells[“privilegesidDataGridViewTextBoxColumn1”].Value=aDefaultValue;如果这解决了问题,那就意味着出现了一些错误,这个错误让你提出了这个问题,现在加上
DataError
基本上消除了这个错误。因此错误并没有消失,只是被忽略了,它可能以另一种格式出现。您应该看到确切的错误是什么,如图所示。请参阅本文件。这可能会有帮助。请参阅本文件。也许会有帮助