问题描述
我有一个包含 5 列的 datagridview,在代码中我还添加了 datagridview1__CellValidating 事件。 当前,当用户尝试修改单元格值然后离开单元格时,会触发 datagridview1__CellValidating 事件,但我不希望始终触发 datagridview1__CellValidating。
就我而言,假设我正在尝试修改第 3 列的值,然后单击\选择当前行的第 2 列或第 1 列中的单元格。在这种情况下,我不希望触发 datagridview1__CellValidating。我可以在 datagridview1__CellValidating 中添加任何条件吗?
但如果我尝试选择当前行中第 4 或 5 列的单元格,我希望在修改第 2 列的值后执行 datagridview1__CellValidating。
解决方法
在 CellValidating
中使用 DataGridView
事件并取消对第 1 列和第 2 列的编辑。
private void DataGridView1_CellValidating(object sender,DataGridViewCellValidatingEventArgs e)
{
DataGridViewCellCollection cells = dataGridView1.Rows[e.RowIndex].Cells;
foreach(DataGridViewCell cell in cells)
{
if(cell.ColumnIndex == 0 || cell.ColumnIndex == 1)
{
e.Cancel = true;
}
}
}
并覆盖关闭表单的按钮,因为使用 e.Cancel = true
您无法关闭表单。
protected override void OnFormClosing(FormClosingEventArgs e)
{
e.Cancel = false;
base.OnFormClosing(e);
}