阻止C#DataGridView更改当前行的事件
发布时间:2020-12-15 05:40:45 所属栏目:百科 来源:网络整理
导读:我需要一个事件,当System. Windows.Forms.DataGridView的当前行将要更改时触发,并允许我取消此更改,例如通过将EventArgs的Cancel属性设置为true. 我知道CurrentCellChanged(调用事件时行已经改变)和RowLeave(不可能取消离开操作)事件,但都没有提供我需要的东
我需要一个事件,当System.
Windows.Forms.DataGridView的当前行将要更改时触发,并允许我取消此更改,例如通过将EventArgs的Cancel属性设置为true.
我知道CurrentCellChanged(调用事件时行已经改变)和RowLeave(不可能取消离开操作)事件,但都没有提供我需要的东西.我也尝试使用RowValidating事件,但是当该行要进行验证时(无意留下它)也会调用此事件,例如当我调用< ParentForm> .Validate()时,这会导致许多混淆. 是否有任何其他可能性或干净(呃)解决方案来获得所需的行为? 解决方法
我认为你最好的选择是使用带有bool条件的RowValidating来检查你是否调用.Validate().
编辑 根据您的上一条评论,为什么不添加对dataGridView.IsCurrentRowDirty的检查? private void dataGridView1_RowValidating(object sender,DataGridViewCellCancelEventArgs e) { if (dataGridView1.IsCurrentRowDirty) { if (dataCheck()) if (MessageBox.Show("Ok?","Save?",MessageBoxButtons.YesNoCancel) == DialogResult.Cancel) { e.Cancel = true; } } } 如果没有脏数据,无论谁调用验证,都不会生成dataCheck,也不会出现messageBox. 编辑 您可以将“if”子句替换为您想要的任何检查,包括一个用于dataGridView2的子句. 如果您有非常复杂的要求,也可以扩展dataGridView控件. 编辑 我现在明白你的要求了.我不认为有一个快速和干净的解决方案.我会使用SelectionChanged事件并设置逻辑以防止更改.就像是: //rember the selection of the index private int _currentIndex; private bool _rollingBackSelection; private void SelectionChanged(...){ //when changing back to the selection in dgv1 prevent dgv2 check if (_rollingBackSelection) { _rollingBackSelection = false; return; } if (dgv2IsDirty()) { var result = MessageBox.Show("Ok?",MessageBoxButtons.YesNoCancel); if (result == DialogResult.Cancel) { _rollingBackSelection = true; //rollback to the previous index dgv1.Rows[_currentIndex].Selected = true; return; } if (result == DialogResult.Yes) dgv2Save(); dgv2Load(); _currentIndex = dgv1.SelectedRows[0].Index; } } 我认为上面的内容是你最好的一击. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- cocos IDE 创建js
- .net – 每个解决方案的单一测试项目
- flash和c#通信
- JavaScript email邮箱/邮件地址的正则表达式及分析
- 如何在Swift中编写initwithcoder代码?
- Flex中的initialize,creationComplete和applicationComplet
- 对象贫血一定是错的么?还是DDD领域驱动设计有误区?
- 关于自定义控件在布局文件中使用时提示error: Error parsin
- org.xml.sax.SAXParseException: The prefix "context&
- How completely uninstall PostgreSQL 9.X on Mac OSX