[英]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.