提交更改后,DataGridView的行仍然是脏的我提交到数据库后,DataGridView.IsCurrentRowDirty仍然为真。我想将它设置为false,这样它在失去焦点时就不会触发RowValidating。我有一个绑定到BindingList的DataGridView。我处理CellEndEdit事件并将更改保存到数据库。保存这些更改后,我希望DataGridView.IsCurrentRowDirty设置为true,因为该行中的所有单元格都是最新的;但是,它被设置为false。这给我带来了问题,因为当该行失去焦点时,RowValidating会触发,我会处理并验证所有三个单元格。因此,即使所有单元格都是有效的并且没有一个是脏的,它仍然会验证它们。那是一种浪费。这是我的一个例子:voiddataGridView_CellValidating(objectsender,DataGridViewCellValidatingEventArgse){//如果单元格不脏则忽略它//验证当前单元格。}voiddataGridView_RowValidating(CDataGellValidatingSender){//如果行不脏则忽略它if(!dataGridView.IsCurrentRowDirty)return;//验证当前行中的所有单元格。}voiddataGridView_CellEndEdit(objectsender,DataGridViewCellEventArgse){//验证当前行中的所有单元格,如果有无效则返回。//如果它们有效,将更改保存到数据库//这是我希望dataGridView.IsCurrentRowDirty为假的时候。//当此行失去焦点时,它将触发RowValidating并验证此行中的所有//单元格,我们已经在上面做了。我读过一些帖子说我可以调用表单的Validate()方法,但这会导致RowValidating触发,我正试图避免这种情况。知道如何将DataGridView.IsCurrentRowDirty设置为true吗?或者也许是一种防止RowValidating不必要地验证所有单元格的方法?您是否在将数据保存到数据库后尝试调用DataGridView1.EndEdit()。我在验证两次时遇到了同样的问题。在编辑之前(如预期的那样),然后在我认为DataGridView焦点发生变化时再次进行。没时间调查。快速修复是this.ActiveControl=null;我不确定这是否会产生任何意想不到的后果,但它通过以编程方式取消控件来修复验证问题。以上是C#学习教程:提交修改后,DataGridView行还是脏的,共享所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——introw=e.RowIndex;intcol=e.ColumnIndex;//验证编辑if((row>=0)&&(col==cntrl_MethodParameters.Columns.IndexOf(cntrl_MethodParameters.Columns[MethodBuilderView.m_paramValueCol]))){stringxPropertyName=(string)cntrl_MethodParameters[MethodBuilderView.m_paramNameCol,row]。已编辑格式化值;字符串xPropertyValue=(字符串)cntrl_MethodParameters[MethodBuilderView.m_paramValueCol,行].EditedFormattedValue;boolValidated=FactoryProperties.Items[xPropertyName].SetState(xPropertyValue);//取消无效输入if(!Validated){dgv.CancelEdit();}}this.ActiveControl=null;}本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
