我正在制作一个错误处理程序,当我输入无效的时间或日期格式(如 12:456 和 55-32-1986)时,它将激活。然后程序应该将单元格值更改回上一个值。
我正在使用 .NET 4.5,这是一个 winforms 应用程序
编码:
dataGridView2.DataError += dataGridView2_DataError;
private void dataGridView2_DataError(object sender, DataGridViewDataErrorEventArgs anError)
{
// MessageBox.Show("Error happened " + anError.Context.ToString());
if (anError.Context == DataGridViewDataErrorContexts.Commit)
{
MessageBox.Show("Commit error");
}
if (anError.Context == DataGridViewDataErrorContexts.CurrentCellChange)
{
MessageBox.Show("Cell change");
}
if (anError.Context == DataGridViewDataErrorContexts.Parsing)
{
MessageBox.Show("parsing error");
}
if (anError.Context == DataGridViewDataErrorContexts.LeaveControl)
{
MessageBox.Show("leave control error");
}
if ((anError.Exception) is ConstraintException)
{
DataGridView view = (DataGridView)sender;
view.Rows[anError.RowIndex].ErrorText = "an error";
view.Rows[anError.RowIndex].Cells[anError.ColumnIndex].ErrorText = "an error";
anError.ThrowException = false;
}
if ((anError.Exception) is FormatException)
{
if (dataGridView2.CurrentCell == dataGridView2.CurrentRow.Cells[3])
{
MessageBox.Show("Please enter a valid time value" + prevTime);
dataGridView2.CurrentCell.Value = prevTime;
dataGridView2.EndEdit();
}
if (dataGridView2.CurrentCell == dataGridView2.CurrentRow.Cells[2])
{
MessageBox.Show("Please enter a valid date");
dataGridView2.CurrentCell.Value = prevDate;
dataGridView2.EndEdit();
}
}
//cell types
d.Tables.Add(booking);
booking.Columns.Add("nr.", typeof(int));
booking.Columns.Add("Name", typeof(string));
booking.Columns.Add("Date", typeof(DateTime));
booking.Columns.Add("Time", typeof(DateTime));
//Datasource
dataGridView2.DataSource = booking;
}
prevDate- 和 TimeValue 在 datagrid_onBeginEdit 中声明,以便我拥有这些值。
我有上一个值。代码从头到尾运行。但是从第 2 行开始,它不会以编程方式更改单元格的值。我只能手动进行,当代码无法更改值时,错误消息框会不断出现。datagridview 不是只读的。
细胞:nr。/ 姓名 / 日期 / 时间
任何帮助将不胜感激,在此先感谢。
编辑:我添加了事件处理程序的完整代码
PS。如果我不清楚某处,或者如果您需要更多信息,那么只需告诉您需要什么。