2015-06-20 64 views
1

這裏我在執行NetValueValidation()時得到下面的方括號錯誤(運算符' - '沒有爲'Double'類型定義,並鍵入'DBNull'。)。但其在 「discper」 欄工作執行DiscPerValidation後()運算符' - '未針對類型'Double'進行定義並鍵入'DBNull'。 [vb.net datagridview]

Private Sub grdPurchase_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdPurchase.CellEndEdit 
    CellEdited = True 
    CurrentColumn = e.ColumnIndex 
    CurrentRow = e.RowIndex 
    If Me.grdPurchase.Columns(Me.grdPurchase.CurrentCell.ColumnIndex).Name = "itemcode" Then 
     If Not Me.grdPurchase.Rows(e.RowIndex).Cells("itemcode").Value Is DBNull.Value Then 
      SeekItemDetails() 
     End If 
    Else 
     If Me.grdPurchase.Columns(Me.grdPurchase.CurrentCell.ColumnIndex).Name = "packingratio" Then 
      PackingRatioValidation() 
     ElseIf Me.grdPurchase.Columns(Me.grdPurchase.CurrentCell.ColumnIndex).Name = "price" Then 
      PriceValidation() 
      NetValueValidation() 
     ElseIf Me.grdPurchase.Columns(Me.grdPurchase.CurrentCell.ColumnIndex).Name = "grossamt" Then 
      GrossAmtValidation() 
      'NetValueValidation() 
     ElseIf Me.grdPurchase.Columns(Me.grdPurchase.CurrentCell.ColumnIndex).Name = "kgs" Then 
      KGSValid() 
      'NetValueValidation() 
     ElseIf Me.grdPurchase.Columns(Me.grdPurchase.CurrentCell.ColumnIndex).Name = "discper" Then 
      DiscPerValidation() 
      'NetValueValidation() 
     End If 
     SendKeys.Send("{UP}" + "{TAB}") 
    End If 
End Sub 

Private Sub PackingRatioValidation() 
    If Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("packingratio").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("packingratio_temp").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("itemcode").Value Is DBNull.Value Then 
     Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("qty").Value = _ 
      Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("packingratio").Value * _ 
      Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("packingratio_temp").Value 
    End If 
End Sub 

Private Sub PriceValidation() 
    If Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("itemcode").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("qty").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("price").Value Is DBNull.Value Then 
     Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value = Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("price").Value * _ 
      Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("qty").Value 
    End If 
End Sub 

Private Sub GrossAmtValidation() 
    If Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("itemcode").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("qty").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value Is DBNull.Value Then 
     Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("price").Value = Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value/_ 
      Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("qty").Value 
    End If 
End Sub 

Private Sub KGSValid() 
    If Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("itemcode").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("qty").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("price").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value Is DBNull.Value Then 
     Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("kgrate").Value = Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value/_ 
      Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("kgs").Value 
    End If 
End Sub 

Private Sub DiscPerValidation() 
    If Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("itemcode").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value Is DBNull.Value And _ 
      Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("discper").Value Is DBNull.Value Then 
     Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("discamt").Value = _ 
      (Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value/100) * _ 
      Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("discper").Value 
    End If 
End Sub 

Private Sub NetValueValidation() 
    If Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("itemcode").Value Is DBNull.Value And _ 
    Not Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value Is DBNull.Value Then 
     Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("netvalue").Value = _ 
     Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value - _ 
     Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("discamt").Value 
    End If 
End Sub 
+0

無關,但複製/粘貼的數量正在讓我的眼睛抽搐。 –

回答

2

消息意味着,在這種代碼:

Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("grossamt").Value - _  
Me.grdPurchase.Rows(Me.grdPurchase.CurrentCell.RowIndex).Cells("discamt").Value 

其中2個細胞是DBNull。根據這個消息,它是一個涉及減法的單元,這就是這2個。奇怪的是,在那裏你正在測試單元格後的單元格爲DBNull,但不在這裏。


不是沒有,但是你有很多很多不需要的代碼,這使得很難看到這種類型的東西。例如大如果區塊CellEndEdit可以簡化類似:

Dim name As String = dgv2.Rows(e.ColumnIndex).Cells(e.ColumnIndex).Value.ToString 
Select Case name 
    Case "price" 
     PriceValidation(e.RowIndex) 
     NetValueValidation(...) 
    Case "grossamt" 
     GrossAmtValidation(...) 
End Select 

我不知道爲什麼你的arent使用可用的事件參數。然後,這樣的事情是所有你需要的PriceValidation(通過該行從EventArgs上工作的話):

Private Sub PriceValidation(r As Int32) 
    ' note: this is DOING pricing, not validation 
    Dim quan = SafeConvert(dgv.Rows(r).Cells("qty").Value) 
    Dim price = SafeConvert(dgv.Rows(r).Cells("price").Value) 

    dgv.Rows(r).Cells("grossamt").Value = (quan * price) 
End Sub 

我懷疑Option Strict沒有 - 但它應該是:

grdPurchase.Rows(...).Cells("qty").Value = _ 
grdPurchase.Rows(...).Cells("packingratio").Value * _ 
grdPurchase.Rows(...).Cells("packingratio_temp").Value 

單元格值返回對象,而不是數字,以便代碼嘗試乘以2個對象。你可以使用這兩個測試的DBNull上細胞(在PriceValidation上面使用)一個簡單的程序:

' helper function to convert a DBNull 
Private Function SafeConvert(v As Object) As Double 
    If System.DBNull.Value.Equals(v) Then 
     Return 0 
    Else 
     Dim d As Double = 0 
     If Double.TryParse(v.ToString, d) Then 

     End If 
     Return d 
    End If 
End Function 

這將在具有數量或價格而不是商品編號(文本)細胞起作用。每當你發現自己一遍又一遍地輸入相同的代碼時,停下來尋找更好的方法。

+0

Plutonix ,, ...非常感謝....我已通過我們的代碼完成了我的工作..我希望你的幫助在未來也......(Y):) –

相關問題