C#Winform:验证GridDataView单元格值

时间:2019-04-30 23:02:38

标签: c# winforms validation

我正在尝试验证单元格的值以确保其为数字。如果不是我想要显示错误,请擦除单元格,然后将其重新设置到单元格中以进行纠正。

    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异常错误。

2 个答案:

答案 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);
        }
    }
}

让我知道是否有帮助,欢呼。