Running total for GridView.

T

tshad

I am building a GridView that is displaying some money values in 3 columns.

I want to put the totals of each column in a label field (one for each
column) in the footer.

I was trying to figure out which was the faster way or more efficient way.

I originally thought about getting SQL to do it, but that would entail
either a second Select or some type of subquery or self join, which I am not
sure is the best way.

The other way was to just total the columns in the grid as I bind the grid
(or after in the PreRender event).

I usually like to do my cleaning up of the grid or assign colors to the text
in the grid (based on the data) in the PreRender event. I just loop through
the grid and do the changes at that point.

I could also do the changes during the ItemDataBind event but am not sure
which would be better - add them up in the ItemDataBind event with the
overhead of the event firing for each row or just do it all at once in the
PreRender event.

Even in the PreRender event - how would I get access to the label in the
Footer of the GridView to sum up the rows?

Thanks,

Tom
 
M

Manish

Hi Tom,

Please refer to the code below to get the running sum of the column in the
footer for the GridView control.

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
Dim sum As Double = 0.0

Dim i As Integer
For i = 0 To Me.GridView1.Rows.Count - 1
Dim s As String = Me.GridView1.Rows(i).Cells(0).Text
Dim val As Double = Double.Parse(s,
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.CurrentCulture)
sum = sum + val
Next

If e.Row.RowType = DataControlRowType.Footer Then
CType(e.Row.Cells(2).FindControl("Label1"), Label).Text = sum
End If
End Sub

Regards,
Manish
 
M

Milosz Skalecki [MCAD]

Howdy,

Just a small change, shouldn't be :

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

If e.Row.RowType = DataControlRowType.Footer then

Dim sum As Double = 0.0

Dim i As Integer
For i = 0 To Me.GridView1.Rows.Count - 1
Dim s As String = Me.GridView1.Rows(i).Cells(0).Text
Dim val As Double = Double.Parse(s,
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.CurrentCulture)
sum = sum + val
Next

CType(e.Row.Cells(2).FindControl("Label1"), Label).Text = sum

End If
End Sub


Or even simpler

private sum as Double = 0.0

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound

Dim row As GridViewRow = e.Row

if row.RowType = DataControlRowType.DataRow Then
Me.sum += Convert.ToDouble(CType(row.DataItem, DataRowView)("Double"))
else if row.RowType = DataControlRowType.Footer Then
CType(e.Row.Cells(2).FindControl("Label1"), Label).Text = Me.sum.ToString()
end if

End Sub

Hope this helps
 
T

tshad

Milosz Skalecki said:
Howdy,

Just a small change, shouldn't be :

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles
GridView1.RowDataBound

If e.Row.RowType = DataControlRowType.Footer then

Dim sum As Double = 0.0

Dim i As Integer
For i = 0 To Me.GridView1.Rows.Count - 1
Dim s As String = Me.GridView1.Rows(i).Cells(0).Text
Dim val As Double = Double.Parse(s,
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.CurrentCulture)
sum = sum + val
Next

CType(e.Row.Cells(2).FindControl("Label1"), Label).Text = sum

End If
End Sub


Or even simpler

private sum as Double = 0.0

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles
GridView1.RowDataBound

Dim row As GridViewRow = e.Row

if row.RowType = DataControlRowType.DataRow Then
Me.sum += Convert.ToDouble(CType(row.DataItem, DataRowView)("Double"))
else if row.RowType = DataControlRowType.Footer Then
CType(e.Row.Cells(2).FindControl("Label1"), Label).Text =
Me.sum.ToString()
end if

End Sub

Hope this helps

It did.

Thanks,

Tom.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top