2017-02-20 21 views
0

im работает, чтобы показать данные в моем datagrid, и покажет общее количество элементов, внесенных в textbox2, но эта ошибка "Operator '+' is not определенный для типа «Десятичный» и тип «DBNull». » в чем проблема? пожалуйста, помогите мне, мне нужно закончить это так плохо. . :(Оператор '+' не определен для типа 'Десятичный' и тип 'DBNull'

Private Sub dailySales_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    con.Connect() 
    DataGridView1.DataSource = dtb 
    dtb.Columns.Add("Transaction Code") 
    dtb.Columns.Add("Transaction Date ") 
    dtb.Columns.Add("Item Code") 
    dtb.Columns.Add("Item") 
    dtb.Columns.Add("Description") 
    dtb.Columns.Add("Quantity") 
    dtb.Columns.Add("Price") 
    dtb.Columns.Add("Total") 
    display() 
    con.Close() 
    total() 
    TextBox1.Text = DataGridView1.RowCount() 
    Me.DataGridView1.DefaultCellStyle.Font = New Font("Cambria", 10) 
    Me.DataGridView1.ColumnHeadersDefaultCellStyle.Font = New Font("Cambria", 12) 
    Me.DataGridView1.DefaultCellStyle.SelectionBackColor = Color.FromArgb(129, 207, 224) 
    Dim i As Integer 
    For i = 0 To DataGridView1.Columns.Count - 1 
     DataGridView1.Columns.Item(i).SortMode = DataGridViewColumnSortMode.Programmatic 
    Next 
End Sub 
Sub total() 
    Dim sum As Decimal = 0 
    For x = 0 To DataGridView1.Rows.Count - 1 
     sum =sum + DataGridView1.Rows(x).Cells(7).Value 
    Next 
    TextBox2.Text = sum 
End Sub 
Sub display() 
    con.Connect() 
    Label6.Text = Date.Now.ToString("dd MMMM yyyy") 
    Dim da = Label6.Text 
    Dim sc = " where lower(tns_date) like lower('%" & da & "%') " 
    Dim sql = "select * from tns " & sc & " order by tns_code desc" 
    odr = con.Retrieve(sql) 
    dtb.Clear() 
    While (odr.Read) 
     Dim ic = odr.GetOracleValue(0) 
     Dim itn = odr.GetOracleValue(1) 
     Dim de = odr.GetOracleValue(2) 
     Dim ca = odr.GetOracleValue(3) 
     Dim pr = odr.GetOracleValue(4) 
     Dim st = odr.GetOracleValue(5) 
     Dim sst = odr.GetOracleValue(6) 
     dtb.Rows.Add(ic, itn, de, ca, pr, st, sst) 
    End While 
    con.Close() 

End Sub 
+2

Один из столбцов 7 значений равно нулю Конечно, вы можете проверить, что и не делать добавления,? Или изменить запрос (вы не показали) использовать 'nvl()' или 'coalesce()' для возврата нуля вместо нуля? –

+0

@AlexPoole no null в моих столбцах. Как сделать тест? –

+1

ИЛИ test IsDBnull (DataGridView1.Rows (x) .Cells() 7) .Value) и пропустить, если true –

ответ

0

испытаний, как это

Sub total() 
    Dim sum As Decimal = 0 
    For x = 0 To DataGridView1.Rows.Count - 1 
     If Not isDBNull(DataGridView1.Rows(x).Cells(7).Value) then sum =sum + DataGridView1.Rows(x).Cells(7).Value 
    Next 
    TextBox2.Text = sum 
End Sub 
+0

, тогда я запустим его? –