所有,我想做的很简单(或者我是这么认为的)。我目前有一个DataGridView带有复选框来指示用户是否应该处理。有些进程依赖于其他进程,所以我强制使用检查依赖进程
private void dataGridViewProcess_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == (int)ProcessColumns.Error)
    {
        if (!String.IsNullOrEmpty(dataGridViewProcess.Rows[e.RowIndex]
                                  .Cells[e.ColumnIndex].Value.ToString()))
        {
            Utils.ErrMsg(String.Format("{0}", 
                (String.IsNullOrEmpty(siteReportArr[currentSite, e.RowIndex]) ?
                "Error message currently unavalible. Try again later." : 
                siteReportArr[currentSite, e.RowIndex])));
        }
    }
    dataGridViewProcess.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
private void dataGridViewProcess_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (!bInLoadEvent && e.RowIndex >= 0)
    {
        if (e.RowIndex == (int)CurrentProcess.N)
        {
            DataGridViewRow rowA = dataGridViewProcess.Rows[e.RowIndex];
            DataGridViewRow rowB = dataGridViewProcess.Rows[e.RowIndex + 1];
            if (Convert.ToBoolean(rowA.Cells[(int)ProcessColumns.Process].Value) 
                == false)
            {    
                rowB.Cells[(int)ProcessColumns.Process].Value = false;
            }
        }
        ...
        else if (e.RowIndex == (int)CurrentProcess.C)
        {
            DataGridViewRow rowB = dataGridViewProcess.Rows[e.RowIndex];
            DataGridViewRow rowA = dataGridViewProcess.Rows[e.RowIndex - 1];
            if (Convert.ToBoolean(rowA.Cells[(int)ProcessColumns.Process].Value) 
                == true)
            {
                rowB.Cells[(int)ProcessColumns.Process].Value = true;
            }
        }
    }
}
所有这些程序性更改都可以正常工作,第一个是dataGridViewProcess_CellValueChanged事件中显示的最后一个。在这里,如果C检查了之前的过程并且用户尝试取消选中C,我想强制它保持选中状态。我目前无法让它做到这一点。
我试过使用DataGridView Validated事件,使用CellDirtyStateChanged事件无济于事。对于这个(看似非常基本的)问题的任何帮助将不胜感激。
谢谢你的时间。