none
WinForm中DataGridView录入一行进入下一行时会清空回到初始状态 RRS feed

  • 问题

  • 大家好。
    请教一个问题:
    1、WinForm中DataGridView数据是空的,当录入一行进入下一行时会清空回到无数据的状态,为什么?
    2、我数据库里面先行插入一条记录,然后在WinForm中DataGridView中接着录入新行,完全正常
    可以确认的是主键数据不为空,且格式正确
    谢谢。
    2011年5月28日 10:07

答案

  • 你好:)

    因为你在DataSet强类型数据集中已经设置了主外键映射,这也就意味着DataSet不允许你插入非主键范围的其它值(包括Null)。所以e.Row.Cells[2].Value =DBNull。Value绝对不可以!

    至于说为什么你在Sql Management Studio中可以,那是因为没有在Sql中创建强制的主外键关系。其实你的这种设置是错误的。原因很简单——外键如果不属于主键的某个值,那个这个数据就是冗余的,也就会被忽略了。


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 Paul Zhou 2011年6月6日 5:46
    2011年6月1日 0:56
    版主

全部回复

  • 您好:)

    你的DataGridView在“空的时候”有没有绑定数据源什么的?你是不是直接把一个DataGridView拖拽到WinForm上?如果是这样的且没有绑定数据集,应该不会发生这样的情况。

    如果可以的话,请贴图我们看看实际情况,并且附上源码。谢谢。


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年5月29日 2:15
    版主
  • 你好
    1、我是直接把一个DataGridView拖拽到WinForm上,然后界面操作绑定数据源,在后台根据设置Filter不同显示过滤数据。
    2、里面的列有checkbox,有隐藏的默认值列,
    • a、这在已有数据的情况下接着插入数据,正常!
    • b、若Filter过滤后无数据,录入新数据录不进去
    3、另外一个DataGridView列全是绑定的textbox的普通列,两种情况全部正常。
    4、周一上班再贴源代码,感谢帮助
    2011年5月29日 7:59
  • 你好,
    我的源代码放在
    skydrive中了,请点此下载
    说明见代码中。
    谢谢。



    2011年5月30日 12:18
  • 你好:)

    您给我的代码我已经仔细查看运行。我发现你的外键已经和主键设置了“主外键”关系了(在TableAdapter)。这就意味着外键不能为空,且必须是主键映射的某一个成员。所以你的默认值应该设置成Code的某个成员。

    比如:

     private void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
            {

                //请注意这里!!!
                
                e.Row.Cells[2].Value = "Code1";

                //第4列checkbox填充false
                e.Row.Cells[4].Value = false;
            }


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已建议为答案 Paul Zhou 2011年5月31日 6:08
    • 取消建议作为答案 闪观 2011年5月31日 15:01
    2011年5月31日 5:37
    版主
  • 感谢你的回复!
    之前我提到的不能输入闪行的问题我没能重现,但遇到了新的问题,【无法插入NULL值】
    1、外键不能为空,但可以为NULL(在列允许NULL的前提下)
    2、我现在的问题是如何在编辑新行时默认绑定NULL值?
    3、 e.Row.Cells[2].Value =DBNull。Value
          这句我的本意是达到绑定NULL的目的,但未遂
    请指教。
    谢谢
    2011年5月31日 14:59
  • 你好:)

    因为你在DataSet强类型数据集中已经设置了主外键映射,这也就意味着DataSet不允许你插入非主键范围的其它值(包括Null)。所以e.Row.Cells[2].Value =DBNull。Value绝对不可以!

    至于说为什么你在Sql Management Studio中可以,那是因为没有在Sql中创建强制的主外键关系。其实你的这种设置是错误的。原因很简单——外键如果不属于主键的某个值,那个这个数据就是冗余的,也就会被忽略了。


    如果你有其它意见或私下交流,请发送邮件到:maledong@qq.com;或者请QQ我
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    • 已标记为答案 Paul Zhou 2011年6月6日 5:46
    2011年6月1日 0:56
    版主
  • 非常感谢
    2011年6月8日 5:01