我正在尝试验证单元格的值以确保其为数字。如果不是我想要显示错误,请擦除单元格,然后将其重新设置到单元格中以进行纠正。
private void gridData_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
// If Cell Edited is in the Add'l Qty Column
if (gridData.Columns[e.ColumnIndex].Name == "AddlQty") {
int intVal;
// Validate Entry for Numeric Only
if (int.TryParse(gridData.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(), out intVal)) {
CalcFinalQty(e.RowIndex);
} else {
// Clear and Send User Back to Try Again
gridData.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "";
gridData.CurrentCell = gridData.Rows[e.RowIndex].Cells[e.ColumnIndex];
MessageBox.Show("Entry Not Valid, Only Numeric Values Accepted");
gridData.BeginEdit(true);
}
}
} // End gridData_CellEndEdit
它捕获是否为数字,擦除单元格,但显示两次MessageBox。第一次之后,选定的单元格向下移动到下一个单元格,它弹出另一个MessageBox,然后THEN移回该单元格并设置为编辑。
如果您在不输入任何内容的情况下按Enter键,则会显示Null异常错误。
答案 0 :(得分:1)
尝试分配一个“ 0”值而不是清除。
gridData.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "0";
执行gridData.BeginEdit(true);
时,它返回到编辑事件,并转到每个单元格,并再次调用Try.Parse
部分。
Try.Parse
变得错误,因为它无法将""
的值解析为int
。
这可以确保您的应用程序在用户未放置任何内容时将强制放置零值。
答案 1 :(得分:1)
我在这里怀疑。我认为beginEdit会以某种方式触发事件。如果是这样,您能否再次检查else语句以确保该值不为空,如果不是,则显示消息框?就像这样:
private void gridData_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
// If Cell Edited is in the Add'l Qty Column
if (gridData.Columns[e.ColumnIndex].Name == "AddlQty") {
int intVal;
// Validate Entry for Numeric Only
if (int.TryParse(gridData.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(), out intVal)) {
CalcFinalQty(e.RowIndex);
} else {
if(!String.IsNullOrEmpty(gridData.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()))
// Clear and Send User Back to Try Again
gridData.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "";
gridData.CurrentCell = gridData.Rows[e.RowIndex].Cells[e.ColumnIndex];
MessageBox.Show("Entry Not Valid, Only Numeric Values Accepted");
gridData.BeginEdit(true);
}
}
}
让我知道是否有帮助,欢呼。