Binding Data to the ReportViewer Control Dynamically in ASP.NET 2.0 - Binding an XML document to a ReportViewer control in ASP.NET 2.0
(Page 3 of 6 )
XML Document
In previous sections, I demonstrated how to work with a simple SELECT statement and bind it to the ReportViewer control. Now, I shall demonstrate how to bind an XML document to the ReportViewer control.
Before binding, we need to add an XML document to our project (called SalesDataFile.xml) with a structure that exactly matches that of the dataset created in the previous sections. It is also recommended that we have the schema reference the same dataset.
The following is the simple XML document I created for the purpose of this demonstration.
<?xml version="1.0" encoding="utf-8"?>
<SalesData xmlns="http://tempuri.org/SalesData.xsd">
<Data>
<SalesPersonID>1001</SalesPersonID>
<FirstName>Jag</FirstName>
<SalesQuota>20000</SalesQuota>
<SalesYTD>21000</SalesYTD>
<SalesLastYear>19000</SalesLastYear>
</Data>
<Data>
<SalesPersonID>1002</SalesPersonID>
<FirstName>Chat</FirstName>
<SalesQuota>30000</SalesQuota>
<SalesYTD>32000</SalesYTD>
<SalesLastYear>15000</SalesLastYear>
</Data>
<Data>
<SalesPersonID>1003</SalesPersonID>
<FirstName>Winner</FirstName>
<SalesQuota>25000</SalesQuota>
<SalesYTD>19000</SalesYTD>
<SalesLastYear>25000</SalesLastYear>
</Data>
<Data>
<SalesPersonID>1004</SalesPersonID>
<FirstName>Dhan</FirstName>
<SalesQuota>15000</SalesQuota>
<SalesYTD>30000</SalesYTD>
<SalesLastYear>21000</SalesLastYear>
</Data>
</SalesData>
From the above document you can observe that the root element will be nothing but the dataset name. Each row gets stored in the form of “Data” (or data table within the dataset). And every row is framed with the columns exactly matching the dataset we created earlier.
Source Code
Add a new web form (called XMLbasedReport) and drag a ReportViewer control onto it. Modify your code-behind file in such a way that it looks something like the following:
ImportsMicrosoft.Reporting.WebForms
ImportsSystem.Data
PartialClass XMLbasedReport
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Set the processing mode for the ReportViewer to Local
ReportViewer1.ProcessingMode = ProcessingMode.Local
Dim rep As LocalReport = ReportViewer1.LocalReport
rep.ReportPath = "SampleReport.rdlc"
Dim ds As DataSet = GetSalesData()
'Create a report data source for the sales order data
Dim dsSalesOrder As New ReportDataSource()
dsSalesOrder.Name = "SalesData_Data"
dsSalesOrder.Value = ds.Tables("Data")
rep.DataSources.Add(dsSalesOrder)
End Sub
Private Function GetSalesData()
Dim ds As New DataSet
'ds.ReadXml(Server.MapPath("SalesDataFile.xml"))
ds.ReadXml(HttpContext.Current.Request.MapPath("SalesDataFile.xml"))
Return ds
End Function
EndClass
The heart of the above code is the following statement:
ds.ReadXml(HttpContext.Current.Request.MapPath
("SalesDataFile.xml"))
The above statement reads the entire XML document and gets populated in the form of a dataset.
You can also work with the XMLDataSource control to deal with this scenario. I shall cover that in my upcoming articles.
Next: Binding a text file (with comma separated values or CSV) to a ReportViewer control in ASP.NET 2.0 >>
More ASP.NET Articles
More By Jagadish Chaterjee