加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

阻止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;
     }
}

我认为上面的内容是你最好的一击.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读