繁体   English   中英

C#Winform:验证GridDataView单元格值时出现Null异常错误

[英]C# Winform: Null Exception Error when Validating GridDataView Cell Value

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

    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”值而不是清除。

gridData.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "0";

当执行gridData.BeginEdit(true); 它返回到编辑事件,并将转到每个单元格,并再次调用Try.Parse部分。

Try.Parse变得假,因为它无法将""值解析为int

这样可以确保您的应用程序在用户未放置任何内容时将强制放置零值。

我在这里怀疑。 我认为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);
        }
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM