所有,我想做的很简单(或者我是这么认为的)。我目前有一个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
事件无济于事。对于这个(看似非常基本的)问题的任何帮助将不胜感激。
谢谢你的时间。