reportviewer untyped dataset

4
I was in search of binding a dataset form my application to the reportviewer control on winform/webpage. The I came across this article and it worked for me. Hope others get through from this too…. Sorce: http://www.topxml.com/rbnews/XML/re-76790_DYNAMIC-BINDING-OF-REPORTVIEWER-CONTROL- TO-UNTYPED-DATASET.aspx 1. Drop a ReportViewerControl to your favourite webform 2. Drop a new DataSet in the project (DataSet1) 3. Create a DataTable in DataSet's XSD (DataSet1.xsd) which should define the structure of <Books.xml> I created Table1 which defines 2 types. I guess 2 are enough!! - Book_ID (of type System.Int32) - Title (of type System.String) 4. Drop a new RDLC file to project. You will notice the DataSet1 and DataTable1 being shown in "WebSite Data Sources" + DataSet1 - DataTable1 - Book_Id - Title 5. Drop a table to it. Drag and drop the Fields ( Fields!Book_ID.Value and Fields!Title.Value) 6. use the CODE LISTING 2 in Page_Load. NOTE: Pay attention to this line: Me.ReportViewer1.LocalReport.DataSources.Add(New Microsoft.Reporting.WebForms.ReportDataSource("DataSet1_DataTable1", Dt))

Upload: rajchanchal

Post on 10-May-2015

1.326 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Reportviewer Untyped Dataset

I was in search of binding a dataset form my application to the reportviewer control on winform/webpage.

The I came across this article and it worked for me. Hope others get through from this too….

Sorce: http://www.topxml.com/rbnews/XML/re-76790_DYNAMIC-BINDING-OF-REPORTVIEWER-CONTROL-TO-

UNTYPED-DATASET.aspx

1. Drop a ReportViewerControl to your favourite webform

2. Drop a new DataSet in the project (DataSet1)

3. Create a DataTable in DataSet's XSD (DataSet1.xsd) which should define the structure of <Books.xml>

    I created Table1 which defines 2 types. I guess 2 are enough!!

    - Book_ID (of type System.Int32)

    - Title (of type System.String)

4. Drop a new RDLC file to project. 

   You will notice the DataSet1 and DataTable1 being shown in "WebSite Data Sources"

     + DataSet1

         - DataTable1

                 - Book_Id

                 - Title

 

5. Drop a table to it. 

    Drag and drop the Fields ( Fields!Book_ID.Value and Fields!Title.Value)

6. use the CODE LISTING 2 in Page_Load.

NOTE: Pay attention to this line:

 Me.ReportViewer1.LocalReport.DataSources.Add(New Microsoft.Reporting.WebForms.ReportDataSource("DataSet1_DataTable1", Dt))

 DataSet1_DataTable1 is the link to this hack. We are telling ReportViewer to bind this table "Dt" of ours

(which you might have got from somewhere) to a dataset which is understood by RDLC.

Page 2: Reportviewer Untyped Dataset

Note: You do not have to chose this RDLC in "ReportViewer Tasks". Which means rsweb:ReportViewer component is free to chose it's local report in runtime. Check the neat rsweb:ReportViewer component in CODE LISTING 3.

Here is how it looks when you bind it in design mode. But these all we are doing in RUN TIME.

<rsweb:ReportViewer ID="ReportViewer1" runat="server" Height="499px" Width="861px" >

       <LocalReport ReportPath="Report1.rdlc">

             <DataSources>

                    <rsweb:ReportDataSource DataSourceId="ObjectDataSource1" Name="DataSet1_DataTable1" />

            </DataSources>

       </LocalReport>

</rsweb:ReportViewer>

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"TypeName="DataSet1TableAdapters."></asp:ObjectDataSource>

 

 

CODE LISTING 1: Books.Xml 

[XML]

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE BookRoot SYSTEM "E:\Projects\XML TRAINING\Day 1\XML Examples\books.dtd">

<BookRoot>

   <Book ISBN="Ind-123-4-5" Date="3.14 mod 5">

          <Author AuthID="a1">

                   <Name WorkedWith="a2">William</Name>

Page 3: Reportviewer Untyped Dataset

                    <Location>GB</Location>

          </Author>

          <Author AuthID="a2">

                    <Name WorkedWith="a1">Dennis</Name>

                    <Location>USA</Location>

          </Author>

          <Title>As you like it</Title>

           <Price>100$</Price>

            <SoldAt CountryId="GB">GB</SoldAt>

            <SoldAt CountryId="US">US</SoldAt>

            <SoldAt CountryId="INDIA">India</SoldAt>

             <Publisher>Tech Media</Publisher>

    </Book>

</BookRoot>

[\XML] 

 

CODE LISTING 2:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

     ReportViewer1.ProcessingMode = ProcessingMode.Local

     Dim rep As LocalReport = ReportViewer1.LocalReport

     rep.ReportPath = "Report1.rdlc"

     ' Lets get a dataset

      Dim ds As DataSet = New DataSet("DynDS")

Page 4: Reportviewer Untyped Dataset

      ds.ReadXml(HttpContext.Current.Request.MapPath(".\Books.xml"))

      Dim Dt As New DataTable()

      Dt = ds.Tables(0)

      'Table name = Book

      Me.ReportViewer1.LocalReport.DataSources.Clear()

      Me.ReportViewer1.LocalReport.DataSources.Add(New Microsoft.Reporting.WebForms.ReportDataSource("DataSet1_DataTable1", Dt))

End Sub

 

CODE LISTING 3: Just for reference, how your aspx page's HTML should look like.(completly unneccesary)

 <body>

<form id="form1" runat="server">

<rsweb:ReportViewer ID="ReportViewer1" runat="server" Height="499px" Width="861px">

</rsweb:ReportViewer>

</form>

</body>