簡體   English   中英

DatagridView隨機獲取格式錯誤

[英]DatagridView Randomly Gets Formatting Error

我的應用程序出現問題,在我填充DataGridView控件時,我隨機收到錯誤消息“單元格的格式化值具有錯誤的類型”。

該控件綁定到一個數據表,該數據表從我的數據庫構建一個行列表。 我有適當的單元格格式,用於檢查單元格數據並相應地進行更改。 例如,如果cell.value ='x',則cell.value = y,依此類推。這似乎在99%的時間內都能正常工作,但我時不時地會收到上述錯誤。 如果我清除錯誤並刷新,則DataGridView控件會很好地填充。

無論如何,我可以准確地找到導致此錯誤的原因嗎? 我的代碼看起來像這樣...

Private Sub dgvRegisters_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles dgvRegisters.CellFormatting

Try
    If e.RowIndex < 0 Then Exit Sub

    If (dgvRegisters.Columns(e.ColumnIndex).Name = "r_Online") Then
        e.FormattingApplied = True

        Select Case Convert.ToInt32(dgvRegisters.Rows(e.RowIndex).Cells(e.ColumnIndex).Value)
            Case 1
                e.Value = ilstVNC.Images(0)
            Case Else
                e.Value = ilstVNC.Images(1)
        End Select
        If XMLLoggingType = "Debug (All Activity)" Then CreateLog("Formatting DatagridView('Registers')  " & dgvRegisters.Columns(e.ColumnIndex).Name & "(" & e.RowIndex + 1 & ")")
    End If

    If (dgvRegisters.Columns(e.ColumnIndex).Name = "r_OS") Then
        e.FormattingApplied = True

        Select Case (dgvRegisters.Rows(e.RowIndex).Cells(e.ColumnIndex).Value).ToString
            Case "Microsoft Windows XP Professional"
                e.Value = "Win XP"
            Case Else
                e.Value = ""
        End Select
        If XMLLoggingType = "Debug (All Activity)" Then CreateLog("Formatting DatagridView('Registers')  " & dgvRegisters.Columns(e.ColumnIndex).Name & "(" & e.RowIndex + 1 & ")")
    End If

    If (dgvRegisters.Columns(e.ColumnIndex).Name = "r_TimeZone") Then
        e.FormattingApplied = True

        Select Case (dgvRegisters.Rows(e.RowIndex).Cells(e.ColumnIndex).Value).ToString
            Case "(GMT+09:30) Adelaide"
                e.Value = "Adelaide"
            Case "(GMT+10:00) Brisbane"
                e.Value = "Brisbane"
            Case "N/A"
                e.Value = ""
            Case Else
                e.Value = ""
        End Select
        If XMLLoggingType = "Debug (All Activity)" Then CreateLog("Formatting DatagridView('Registers')  " & dgvRegisters.Columns(e.ColumnIndex).Name & "(" & e.RowIndex + 1 & ")")
    End If

    If (dgvRegisters.Columns(e.ColumnIndex).Name = "r_ComputerType") Then
        e.FormattingApplied = True

        Select Case (dgvRegisters.Rows(e.RowIndex).Cells(e.ColumnIndex).Value).ToString
            Case "AWRDACPI"
                e.Value = "A-Box 122"
            Case "HP Compaq dx7400 SFF", "HP Compaq dx7400 Small Form Factor.", "HP Compaq dx7400 Microtower"
                e.Value = "HP DX7400"
            Case "GHD385AV"
                e.Value = "HP GHD385"
            Case "To Be Filled By O.E.M."
                e.Value = "A-Box 120"
            Case Else
                e.Value = "Unknown"
        End Select
        If XMLLoggingType = "Debug (All Activity)" Then CreateLog("Formatting DatagridView('Registers')  " & dgvRegisters.Columns(e.ColumnIndex).Name & "(" & e.RowIndex + 1 & ")")
    End If

    If (dgvRegisters.Columns(e.ColumnIndex).Name = "r_p_pos") Or (dgvRegisters.Columns(e.ColumnIndex).Name = "r_p_updprg") Or (dgvRegisters.Columns(e.ColumnIndex).Name = "r_p_communic") Or (dgvRegisters.Columns(e.ColumnIndex).Name = "r_p_eftclt") Or (dgvRegisters.Columns(e.ColumnIndex).Name = "r_p_eftsvr") Then
        e.FormattingApplied = True

        Select Case Convert.ToInt32(dgvRegisters.Rows(e.RowIndex).Cells(e.ColumnIndex).Value)
            Case 1
                e.Value = ilstStatus.Images(0)
            Case Else
                e.Value = ilstStatus.Images(1)
        End Select
        If XMLLoggingType = "Debug (All Activity)" Then CreateLog("Formatting DatagridView('Registers')  " & dgvRegisters.Columns(e.ColumnIndex).Name & "(" & e.RowIndex + 1 & ")")
    End If

Catch ex As Exception
    If (XMLLogErrors = True And XMLLoggingType = "Custom") Or XMLLoggingType = "Debug (All Activity)" Then CreateLog(ex.Message)
    If MySQLConn.State = ConnectionState.Open Then MySQLConn.Close()

End Try
End Sub

基本上,這段代碼只是運行並檢查特定單元格的特定值。 我是vb.net的新手,但是如果我的代碼有錯誤,那么我每次加載DataGridView控件時都會收到錯誤消息。

任何幫助,將不勝感激謝謝。

好的,在我的代碼中,我認為我找到了問題的原因,但沒有找到答案。

我認為問題是當我的SQL查詢無法返回任何結果(或無法足夠快地返回結果)時,我的代碼進入了Cell_Formatting事件,但是由於沒有數據而出錯:

私有子類dgvRegisters_CellFormatting(作為對象發送,作為DataGridViewCellFormattingEventArgs發送)處理dgvRegisters.CellFormatting嘗試如果e.RowIndex <0然后退出子

    If (dgvRegisters.Columns(e.ColumnIndex).Name = "r_Online") Then
        e.FormattingApplied = True

        Select Case Convert.ToInt32(dgvRegisters.Rows(e.RowIndex).Cells(e.ColumnIndex).Value) 'Code falls over here with Object reference not set to an instance of an object

我不知道如果數據集返回零個記錄,如何阻止我的代碼進入格式化事件,或者更好的是,如果沒有要格式化的記錄,請跳過格式化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM