2013-04-13 4 views
1

У меня есть 3 элемента управления Datagridview в форме vb.net. DGV1 с ценовой колонкой, DGV2 с колонкой количества, а третий - это общая колонка DGV3. deos, кто-нибудь скажет мне, как это сделать, DGV1 * DGV2 показывает общее количество на DGV3 и обновляет DGV3 каждый раз, когда изменяется значение ячейки DVG1. мой код ниже не обновляет DGV3. Кроме того, одна из проблем заключается в том, что DGV3 вычисляется до того, как DGV2 свяжет DATA, и если значение ячейки DGV2 = 0, это дает мне неправильную сумму. Есть идеи ? Понятно,Добавить 2 значения ячейки datagridview

Private Sub DGV1_CellValueChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV1.CellValueChanged 
    Dim Tot As Int32 = 0 
    DGV3.Enabled = False 
    DGV3.DataSource = Nothing 
    DGV3.Enabled = True 

    Dim OBJ As Double 
    Dim SALES As Integer 
    Dim dtt As DataTable 
    For Each R As DataGridViewRow In Me.DGV1.Rows 
     For Each N As DataGridViewRow In Me.DGV2.Rows 

      OBJ = CDbl(R.Cells(4).Value) 
      SALES = CInt(CDbl(N.Cells(0).Value)) 
      Tot = CInt(OBJ * SALES) 
      DGV3.Rows.Add(Tot.ToString) 

     Next 
    Next 
End Sub 
+0

Действительно ли нужно иметь три Datagridview, не могли бы вы использовать один с тремя столбцами? – STiTCHiCKED

+0

каждый datagrid привязывается к исходному файлу. Я попытался добавить все столбцы к одному datagrid с bindingsource.add (строка), я получил ошибку «добавление строки в источник связи должно быть того же типа», я не мог понять. – user1858480

ответ

0

Если бы вы были в состоянии использовать один DataGridView, я бы об этом так:

Public Class Form1 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     ''// Set the number of columns. 
     DataGridView1.ColumnCount = 3 
     DataGridView1.ColumnHeadersVisible = True 

     ''// Set the column header style. 
     Dim columnHeaderStyle As New DataGridViewCellStyle() 

     columnHeaderStyle.BackColor = Color.Beige 
     columnHeaderStyle.Font = New Font("Verdana", 10, FontStyle.Bold) 
     DataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle 

     ''// Set column names. 
     DataGridView1.Columns(0).Name = "Price" 
     DataGridView1.Columns(1).Name = "Quantity" 
     DataGridView1.Columns(2).Name = "Total" 

     DataGridView1.Enabled = False 
     DataGridView1.DataSource = Nothing 
     DataGridView1.Enabled = True 

    End Sub 

    Private Sub DataGridView1_CurrentCellChanged(sender As Object, e As EventArgs) Handles DataGridView1.CurrentCellChanged 

     ''// show the total in column 3 and update column 3 everytime column `price's` cellvalue gets changed. 
     If (DataGridView1.CurrentCell.ColumnIndex = 0) Then 
      ''// MsgBox("Updating column three `Total`") 

      For Each R As DataGridViewRow In DataGridView1.Rows 
       On Error Resume Next ''// iKNOW <-.-> 

       Dim price As Double = R.Cells(0).Value.ToString 
       Dim quantity As Integer = R.Cells(1).Value.ToString 

       ''// not the auto new new at the bottom. <`.'> 
       If Not (R.IsNewRow) Then 
        Dim Tot As Double = CInt(price * quantity) 
        R.Cells(2).Value = Tot 
       End If 

      Next 

     End If 

    End Sub 
End Class 
+0

Привет, Спасибо. но как бы вы добавили все Datatables из DGV1 и DGV2 в DGV3 bindingsource, если мне нужно использовать только один DGV? как я уже сказал, я пробовал это, и я получил ошибку «добавление строки в источник связи должно быть того же типа» – user1858480

+0

ошибка «Объекты, добавленные в список BindingSource, должны быть одного типа». – user1858480

0

Создание пустого DGV и добавьте нужные столбцы в нем с помощью Добавить столбцы. Затем используйте «Редактировать столбцы», чтобы выбрать значения, которые будут отображаться под каждым конкретным столбцом, который вы создали сейчас. В каждом новом столбце можно увидеть параметр DataBindingsource. поэтому выберите нужный источник данных, который нужно привязать, и DisplayMember (имя столбца, которое содержит значения, которые вы хотите отображать)