Introduction
This article explains how to display a totals line in a GridView
footer. First, bind an XML file to the GridView
. Here is the code for this task:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack = False Then
Dim oDs As New DataSet
oDs.ReadXml(Request.PhysicalApplicationPath + "XMLFile.xml")
GridView1.DataSource = oDs
GridView1.DataBind()
End If
End Sub
And here is the content of the XML file. We want to add the price of each product to a variable called dTotal
and then display this value in the GridView
footer.
="1.0"="utf-8"
<products>
<product>
<id>1</id>
<name>Camembert Pierrot</name>
<price>10,99</price>
</product>
<product>
<id>2</id>
<name>Scottish Longbreads</name>
<price>15,80</price>
</product>
<product>
<id>3</id>
<name>Rhönbräu Klosterbier</name>
<price>29,90</price>
</product>
</products>
The Code
Insert an event handler for the RowCreated
event into your code-behind file. Then, check the RowType
of each new row. In the case of DataControlRowType.DataRow
, add the value of "price" to the variable dTotal
.
In the case of DataControlRowType.Footer
, assign the value of dTotal
to the third cell of the GridView
footer.
Dim dTotal As Decimal = 0
Protected Sub GridView1_RowDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
dTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "price"))
End If
If e.Row.RowType = DataControlRowType.Footer Then
e.Row.Cells(1).Text = "Totals:"
e.Row.Cells(2).Text = dTotal.ToString("c")
e.Row.Cells(1).HorizontalAlign = HorizontalAlign.Right
e.Row.Cells(2).HorizontalAlign = HorizontalAlign.Right
e.Row.Font.Bold = True
End If
End Sub
To display the footer, you have to set the attribute ShowFooter="True"
.