验证 DataGridView 单元格

use*_*602 2 .net datagridview

我有一个DataGridView它的列之一是 DataGridViewCheckBoxColumn。当我检查此列的单元格时,我验证同一行(但不同列)中的其他两个单元格是否为0。如果两者都是0,那么我想取消为复选框列输入的新值(使用事件并忽略其上的更改)。也就是说:如果您选中它并且其他两列都在0(同一行中),那么我想保持取消选中复选框单元格。

我通过处理CellValidating事件来做到这一点。在其中,我检查这两个单元格(在同一行中)是否都是,0如果是,并且用户已选中复选框单元格(也在同一行中),那么我会这样做e.Cancel = true,以便保持未选中复选框单元格并忽略已完成的检查由用户。

但它不起作用,我发现e.RowIndex事件CellValidating与我刚刚单击的行索引不对应,但它e.ColumnIndex是正确的......

总之,我想要的是,当用户检查一行的复选框列时,如果其他两列值都设置为0同一行,我想保持复选框列不变(它保留其旧值,例如例如,如果未选中并且用户选中它,则它将保持未选中状态)。否则,如果这两列没有同时设置为0,则复选框列会将其考虑在内,例如,如果未选中而用户选中了它,则它将更改为已选中。

有任何想法吗?

Moo*_*oop 5

我会使用与 不同的事件CellValidating。我会用CellBeginEdit

dataGridView1.CellBeginEdit += CellBeginEdit;

private void CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;      
    if (dgv[0, e.RowIndex].Value == "2") # or whatever conditions you want to check
    {
        e.Cancel = true;
    }
    else
    {
        e.Cancel = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我相信CellValidating您之前所在的任何单元格都会被调用,这就是行索引没有意义的原因。