Results 1 to 3 of 3

Thread: Sum Data To the Left in Datagridview [Sum Rows In Datagridview]

  1. #1

    Thread Starter
    Junior Member
    Join Date
    Jul 2012
    Location
    INDONESIA - BALI
    Posts
    27

    Question Sum Data To the Left in Datagridview [Sum Rows In Datagridview]

    What's Up Broo..
    I need to sum data in datagridview's rows.. [Or sum data to the left side]

    This is the ilustration :
    ++ I have dgv1

    Name:  dgvSum1.JPG
Views: 2734
Size:  39.2 KB

    ++ I have dgv2

    Name:  dgvSum2.JPG
Views: 2548
Size:  29.1 KB

    I want sum data Column(2) and Column(3) and Column(4) in dgv1
    In row 0 = 60 + 80 + 40 == 180
    In row 1 = 60 + 80 + 60 == 200
    In row 2 = 100 + 100 + 20 === 220
    Next....

    And i want Put the result in my dgv2 in Column(2)
    In row 0 = 180
    In row 1 = 200
    In row 2 = 220
    Next....

    I have been try some code :

    Code:
    ' This Is For Column(2) In row (0)
    
    Dgv2.Item(1,dgv2.Currentrow.Index).Value = dgv1.Item(1,dgv1.Currentrow.Index).Value * dgv1.Item(2,dgv1.Currentrow.Index).Value
    
    'The result is 180
    But that is just for one rows..
    Teach me how to do it using Loop (For - Next)..

    Thanks!!

  2. #2

    Thread Starter
    Junior Member
    Join Date
    Jul 2012
    Location
    INDONESIA - BALI
    Posts
    27

    Resolved Re: Sum Data To the Left in Datagridview [Sum Rows In Datagridview]

    [Resolved]

    Here is the code if somebody need this:

    Code:
    Sub Hitung()
            For i As Integer = 0 To dgv1.Rows.Count - 1
                           
                    Dim A As Double = dgv1.Rows(i).Cells(2).Value
                    Dim B As Double = dgv1.Rows(i).Cells(3).Value
                    Dim C As Double = dgv1.Rows(i).Cells(4).Value
    
                    dgv2.Rows(i).Cells(2).Value = (A+B+C)
    
            Next

  3. #3
    Karen Payne MVP kareninstructor's Avatar
    Join Date
    Jun 2008
    Location
    Oregon
    Posts
    6,686

    Re: Sum Data To the Left in Datagridview [Sum Rows In Datagridview]

    Generally speaking a DataGridView is commonly populated via a DataTable or a strongly typed list. In any case best not to work on the DataGridView but instead the underlying data i.e.
    Code:
    Public Class Form1
        WithEvents bsData As New BindingSource
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim dt As New DataTable With {.TableName = "MyTable"}
            dt.Columns.Add(New DataColumn With
                           {
                               .ColumnName = "Identifier",
                               .DataType = GetType(Int32),
                               .AutoIncrement = True,
                               .AutoIncrementSeed = 1,
                               .ColumnMapping = MappingType.Hidden
                           }
                       )
            dt.Columns.Add(New DataColumn With
                           {
                               .ColumnName = "Col1",
                               .DataType = GetType(Integer),
                               .DefaultValue = 0
                           }
                       )
            dt.Columns.Add(New DataColumn With
                           {
                               .ColumnName = "Col2",
                               .DataType = GetType(Integer),
                               .DefaultValue = 0
                           }
                       )
            dt.Columns.Add(New DataColumn With
                           {
                               .ColumnName = "Col3",
                               .DataType = GetType(Integer),
                               .DefaultValue = 0
                           }
                       )
            dt.Columns.Add(New DataColumn With
                           {
                               .ColumnName = "LineTotal",
                               .DataType = GetType(Integer),
                               .Expression = "Col1 + Col2 + Col3"
                           }
                       )
    
            dt.Rows.Add(New Object() {Nothing, Nothing, 10, 10})
            dt.Rows.Add(New Object() {Nothing, 10, 98, Nothing})
            dt.Rows.Add(New Object() {Nothing, 100, 0, 20})
            bsData.DataSource = dt
    
            DataGridView1.DataSource = bsData
            DataGridView1.Columns("LineTotal").DefaultCellStyle.Alignment =
                DataGridViewContentAlignment.MiddleRight
    
            AddHandler dt.RowChanged, AddressOf _RowChanged
            AddHandler dt.ColumnChanged, AddressOf _ColumnChanged
            AddHandler dt.RowDeleted, AddressOf _RowDeleted
            UpDateTotal()
        End Sub
        Private Sub _ColumnChanged(sender As Object, e As DataColumnChangeEventArgs)
            If Not e.Row.RowState = DataRowState.Deleted Then
                If e.Column.ColumnName = "Col1" Or e.Column.ColumnName = "Col2" Or e.Column.ColumnName = "Col3" Then
                    If Not e.Row.RowState = DataRowState.Detached Then
                        If IsDBNull(e.Row.Item(e.Column.ColumnName)) Then
                            e.Row.Item(e.Column.ColumnName) = 0
                        End If
                        e.Row.AcceptChanges()
                    End If
                    UpDateTotal()
                End If
            End If
        End Sub
        Private Sub _RowChanged(sender As Object, e As DataRowChangeEventArgs)
            If e.Action = DataRowAction.Add Or e.Action = DataRowAction.Change Or e.Action = DataRowAction.Commit Or e.Action = DataRowAction.Change Then
                UpDateTotal()
            End If
        End Sub
        Private Sub _RowDeleted(sender As Object, e As DataRowChangeEventArgs)
            UpDateTotal()
        End Sub
        Private Sub UpDateTotal()
            Dim dt As DataTable = CType(bsData.DataSource, DataTable)
    
            If bsData.Position <> -1 Then
                If Not CType(bsData.Current, DataRowView).Row.RowState = DataRowState.Detached Then
                    dt.Rows(bsData.Position).EndEdit()
                End If
            End If
    
            Dim dv As New DataView() With {.Table = dt, .RowStateFilter = DataViewRowState.CurrentRows, .AllowDelete = False}
            lblTotalSale.Text = (From T In dv.ToTable.AsEnumerable Select T.Field(Of Integer)("LineTotal")).Sum.ToString
        End Sub
    End Class

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width