2 Attachment(s)
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
Attachment 107535
++ I have dgv2
Attachment 107537
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!!
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
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