Monday, 6 July 2015

Print / Export SSRS report in ASP.NET | Print Reportviewer Report using JavaScript / Jquery

Create a report from following post 
http://ssrsmegabits.blogspot.in/2015/06/ssrs-report-in-aspnet-example.html

Now we will update above solution for Print SSRS reports using JavaScript and Export it in PDF Format.

Design:

<div id="result"></div>
    <div id="content">
    <input id="btnPrint" type="button" value="Print Report" onclick="PrintReport();" />
    <asp:Button ID="btnExportPDF" runat="server" Text="PDF"
            onclick="btnExportPDF_Click" />
    <rsweb:ReportViewer  Width="100%" ShowToolBar="false" ID="rptvMyReport" runat="server" AsyncRendering="false">
    </rsweb:ReportViewer>

    </div>

Here we have two div with id 'result' and 'content'.
In result div we will copy the content div in the print format and call print method in javascript.
One button added for export report in PDF Format.

javascript Code:

This code for Print ssrs report.

<script type="text/javascript">   
        function PrintReport() {
            var viewerReference = $find('<%=rptvMyReport.ClientID%>');

            $('#result').empty();
            var stillonLoadState = viewerReference.get_isLoading();

            if (!stillonLoadState) {
               
                var reportArea = viewerReference.get_reportAreaContentType();
                if (reportArea == Microsoft.Reporting.WebFormsClient.ReportAreaContent.ReportPage) {
                    $('#rptvMyReport').clone().prependTo("#result");
                    //copy reportviewer report in div
                    $('#content').hide();
                    $('#result').show();
                    //hide reportviewer containing div and show copied div  
                    window.print();
                     //Open Print dialog
                    $('#content').show();
                    $('#result').hide();
                    //Reset 
                }
            }   
        }
     </script>

Now we will added this code in code behind to get SSRS report in PDF Format.

protected void btnExportPDF_Click(object sender, EventArgs e)
        {
            Warning[] warnings;
            string[] streamIds;
            string mimeType = string.Empty;
            string encoding = string.Empty;
            string extension = string.Empty;
            string Title = "UserList " + Convert.ToString(DateTime.Now);
            byte[] bytes = rptvMyReport.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
            Response.Buffer = true;
            Response.Clear();
            Response.ContentType = mimeType;
            Response.AddHeader("content-disposition", "attachment; filename=" + Title + "." + extension);
            Response.BinaryWrite(bytes); // create the file
            Response.Flush();
        }

Note : If you want to get report in  WORD and EXCEL format then update it as following.

For Excel:
byte[] bytes = rptvMyReport.LocalReport.Render("EXCEL"nullout mimeType, out encoding, out extension, out streamIds, out warnings);

For Word:
byte[] bytes = rptvMyReport.LocalReport.Render("WORD"nullout mimeType, out encoding, out extension, out streamIds, out warnings);


Now check the output, you will get the print and export working in ASP.NET.

Friday, 26 June 2015

SSRS Report in ASP.NET Example

Following steps are given to create a SSRS(RDLC) Report in ASP.NET



1)      Create table "UserList" in Database

2)      Create Connection String in Web.Config
<connectionStrings>
    <add name="constr" connectionString="<Databaseconnection>" ProviderName="System.Data.SqlClient"/>
</connectionStrings>

3)      Add httphandler to web.config.
<system.web>
    <httpHandlers>
      <add path="Reserved.ReportViewerWebControl.axd" verb="*"
      type="Microsoft.Reporting.WebForms.HttpHandler,
      Microsoft.ReportViewer.WebForms, Version=10.0.0.0,
      Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"
      />
    </httpHandlers>
</system.web>
<system.webServer>
    <handlers>
      <add name="ReportViewerWebControlHandler"
      preCondition="integratedMode"
      verb="*" path="Reserved.ReportViewerWebControl.axd"
      type="Microsoft.Reporting.WebForms.HttpHandler,
      Microsoft.ReportViewer.WebForms, Version=10.0.0.0,
      Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
      />
    </handlers>
  </system.webServer>

4)      Create empty ASP.NET Application.
5)      Crate Report Folder, Named it “Reports”
6)      Add SSRS Report(.rdlc) in report folder, Named it “MyReport”.
7)      Add Dataset (.xsd) in report folder, Named it “MyReportUser”.
8)      Design Dataset (add Datatable and add column in datatable as same in SQL Table.

9)      Open Myreport.rdlc file and add DataSet “MyReportUser” in Report Data Section.

10)   Design report as per your requirement.

11)   Add script manager and report viewer to aspx page as shown below:
<form id="form1" runat="server">
    <asp:ScriptManager runat="server">
    </asp:ScriptManager>
    <div>
    <rsweb:ReportViewer Width="100%" ShowToolBar="false" ID="rptvMyReport" runat="server">
    </rsweb:ReportViewer>
    </div>
    </form>
12) Add following namespaces

using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using SSRSReportExample.Reports; //To Access Reports folder Dataset

13) Add to Code Behind

string str = ConfigurationManager.ConnectionStrings["constr"].ToString();
        DataSet ds;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                getUserList();//Call report at page load
            }
        }

        private void getUserList()
        {
            SqlConnection con = new SqlConnection();//Create SQL Connection Object
            MyReportUser dsUserList = new MyReportUser();//Create DataSet Object
            try
            {
                con.ConnectionString = str;
                SqlDataAdapter sda = new SqlDataAdapter("select * from UserList", con);
                con.Open();
               
                sda.Fill(dsUserList, "UserList");//bind data to DataSet
                if (dsUserList.Tables[0].Rows.Count > 0)//if bind is successfull then execute
                {
                    rptvMyReport.ProcessingMode = ProcessingMode.Local;
                    rptvMyReport.LocalReport.ReportPath = Server.MapPath("~/Reports/MyReport.rdlc");
                    rptvMyReport.LocalReport.DataSources.Clear();//Clear previous applied Datasource
                    ReportDataSource rptDataSource = new ReportDataSource("UserList", dsUserList.Tables[0]);//Create Report Datasource and add Dataset in it.
                    rptvMyReport.LocalReport.DataSources.Add(rptDataSource);
                }
            }
            catch { }
            finally { con.Close(); }
        }
14) Build your application and check the result.