簡體   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