问题描述
DataRownewrow=Ds.Tables[0].NewRow();//newrow.BeginEdit();//newrow["Materialsupid"]=txt_MaterialCode.Text;newrow["MaterialCode"]=txt_MaterialCode.Text;//newrow.EndEdit();Ds.Tables[0].Rows.Add(newrow);BindingSourcebindingSource=newBindingSource();bindingSource.DataSource=Ds.Tables[0].DefaultView;dataGridView1.DataSource=bindingSource;bindingNavigator1.BindingSource=bindingSource;Materialsupid同MaterialCode字段为主键,即一个物料编码对应多个供应商.Materialsupid供应商需要开放给用户输入,//newrow["Materialsupid"]="测试";所以这个不开放出来让用户输入,可是用户输入了还是报为空值,如图所示
解决方案
解决方案二:
解决方案三:
看不到你的图,从你代码上面看,你的新行里面只有一个列被设置了值,不知道你的报错不能为空值是不是指其他的列不能为空,你检查一下将相关的完整代码与错误信息贴出来看看
解决方案四:
你的新建行的rows.add()动作应该在你的值都填写完毕以后进行,在哪里设置个断点看看值是不是都进去了
解决方案五:
有两个字段为主键,其中一个字段我已经设了初值,但另外一个主健需要用户自行输入,但是用户输入了还是提示为空,真不知道是哪里原因了
解决方案六:
我发现新增行后要光标移动到其它行后就可以保存呢.怎么回事.
解决方案七:
不能沉啊
解决方案八:
DataGridView.CommitEdit()执行这个方法看看
解决方案九:
引用7楼atlasroben的回复:
DataGridView.CommitEdit()执行这个方法看看
privatevoiddataGridView1_CurrentCellDirtyStateChanged(objectsender,EventArgse){if(dataGridView1.IsCurrentCellDirty){dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);}}是这样吗?还是没有效果
解决方案十:
我没有想明白的就是为什么你需要通过DataRownewrow=Ds.Tables[0].NewRow();的方式去添加数据,因为用户在界面上添加了数据以后你的datagridview的数据源也相应自动更新了,也就是说你的数据源是不需要你去rows.add的所以不是很明白你最开始的代码的描述
解决方案十一:
错误提示写着Materialsupid列为空,不能让这例为空,你把这例给个值就可以了.
解决方案十二:
原来是bindingNavigator1上插入按钮的问题,我新增一个按钮,上用同样的事件保存就没问题,奇怪bindingNavigator1上的保存代码就出现提示