2013-05-15 3 views
0

Я суммирую значение столбца в DataGrid, которое обновляется каждый раз, когда обновляется другой DataGrid. Скажем, пользователь выбирает значение в DataGrid1, он добавляет эти данные в DataGrid. Эта часть работает чудесно. Мне нужно суммировать один из столбцов, чтобы он дал мне общее количество. Это код, который я придумал, который запускается при событии GridView1.SelectedIndexChanged.Недопустимые значения суммирования DataGrid

 For Each GridViewRow In GridView2.Rows 


      Sum = Convert.ToDouble(row.Cells(3).Text) 
      Total = Sum + Total 
      lblTotal.Text = Total.ToString 

     Next 

Теперь проблема возникает из-за этого. Если у меня есть значения rwo, скажем ... 2.00, сумма в порядке. Это даст мне 4. Но если я добавлю еще один Item, скажем, Item2, который имеет значение 2.30, он дает мне всего 4.60. Если я сначала добавлю элемент 2.30, а затем добавлю 2 элемента, он даст мне значение 4. Что происходит, и как может такая простая математика пойти не так: P! Я что-то упускаю? округление? Нужно что-то разобрать?

Полный код впереди

Protected Sub GridView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GridView1.SelectedIndexChanged 


    Dim row = GridView1.SelectedRow 
    If Not row Is Nothing AndAlso IsNumeric(row.Cells(3).Text) Then 
     Dim Price As Double = CDbl(row.Cells(3).Text) 
     Dim Name As String = CStr(row.Cells(2).Text) 
     lblCart.Visible = True 
     Dim InfoTotal As String = "$" & " " & Precio & "  " & Nombre 


     Dim Total As Double 

     If GridView2.Rows.Count = 0 Then 
      ' dt = New DataTable() 
      dt.Columns.Add(New DataColumn("Name", GetType(System.String))) 
      dt.Columns.Add(New DataColumn("Price", GetType(System.String))) 
     Else 
      dt = DirectCast(Session("DataTable"), DataTable) 
     End If 

     Dim Sum As Double 
     Dim dr1 As DataRow = dt.NewRow() 
     dr1(0) = Name.ToString 
     dr1(1) = CDbl(Price.ToString) 
     dt.Rows.Add(dr1) 
     GridView2.DataSource = dt 
     GridView2.DataBind() 
     Session("DataTable") = dt 

     For Each GridViewRow In GridView2.Rows 
      Sum = CDbl(row.Cells(3).Text) 
      Total += Sum 
     Next 

     lblTotal.Text = Total.ToString 
     ListBox1.Items.Add(CStr(InfoTotal)) 

    End If 


End Sub 
+0

какой тип всего? – Paritosh

+0

Его двойной. 'Dim Total As Double' –

+0

Вы пробовали отлаживать его, чтобы прочитать Total каждый раз, когда он был преобразован в строку? Является ли lblTotal использованием автоматического форматирования строк? 'StringFormat =" {0: N0} "' возможно? –

ответ

0

Код был в порядке ... это было что-то простое. Я добавил сеанс и изменил строку в колонку. Код для этой области:

Dim Total As Double 
    Dim Sum As Double 
    Total = Session("Total") 



    For Each GridViewRow In GridView2.Columns 

     Sum = CDbl(row.Cells(3).Text) 
     Total = CDbl(Total + Sum) 
     Session("Total") = Total 

    Next 

    lblTotal.Text = Total.ToString 
1

Похоже, вам не хватает какой-то дополнительный код там, где вы добавляете значение в два раза - пожалуйста, напишите свой полный код. Ниже выполняется то, что вы делаете (хотя бы немного), меньше кода - также не обновляйте метку до тех пор, пока не закончится for.

For Each GridViewRow In GridView2.Rows 
       Sum = CDbl(row.Cells(3).Text) 
       Total += Sum 
      Next 

lblTotal.Text = Total.ToString 
+0

Полный код добавлен. –

Смежные вопросы