【问题标题】:Call the SSRS report in button click and need to get the output as PDF file在按钮单击中调用 SSRS 报告,需要以 PDF 文件格式输出
【发布时间】:2012-12-12 05:10:16
【问题描述】:

我有一个网格视图,其中放置了一个链接按钮来打印报告。在此按钮单击事件中,我需要调用 SSRS 报告并需要将输出作为 PDF 文件。

我使用了下面的代码,代码运行良好,但我看不到打开/保存 pdf 文件的提示。

   protected void btnAuthenticateAndPrint_Click(object sender, EventArgs args)
     {
       try
        {

        //Getting Values from grid
        LinkButton lb = (LinkButton)sender;
        GridViewRow row = (GridViewRow)lb.NamingContainer;
        Label lbOrderID = row.FindControl("lbOrderID") as Label;
        int OrderId = Convert.ToInt32(lbOrderID.Text);
        da = new SqlDataAdapter("Get_PODetails", con);
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        da.SelectCommand.Parameters.AddWithValue("@MPDI_ID", OrderId);
        ds = new DataSet();
        da.Fill(ds, "PO");
        if (ds.Tables["PO"].Rows.Count > 0)
        {
            lblPOId.Text=ds.Tables["PO"].Rows[0]["MPDI_ID"].ToString();
            lblVendid.Text = ds.Tables["PO"].Rows[0]["MVDI_ID"].ToString();
            lblBranch.Text = ds.Tables["PO"].Rows[0]["MBRI_ID"].ToString();
            lblDate.Text = Convert.ToDateTime(ds.Tables["PO"].Rows[0]["MPDI_Date"]).ToString("dd-MM-yyyy");
        }

        //SSRS Report Print
        rs = new RSWebService.ReportingService2005();
        rsExec = new REWebService.ReportExecutionService();
        rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
        rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;
        rs.Url = "http://localhost/ReportServer/ReportService2005.asmx";
        rsExec.Url = "http://localhost/ReportServer/ReportExecution2005.asmx";
        byte[] Sendresults = null;
        byte[] bytes = null;
        string historyID = null;
        string deviceInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";
        string format = "PDF";
        string encoding = null;
        string mimeType = null;
        string extension = null;
        REWebService.Warning[] warnings = null;
        string[] streamIDs = null;
        string _reportName = @"/FIMO GOF Assets Reports/PURCHASE ORDER";
        REWebService.ExecutionInfo ei = rsExec.LoadReport(_reportName, historyID);
        REWebService.ParameterValue[] parameters = new REWebService.ParameterValue[4];
        parameters[0] = new REWebService.ParameterValue();
        parameters[0].Name = "MVDI_ID";
        parameters[0].Value = lblVendid.Text;
        parameters[1] = new REWebService.ParameterValue();
        parameters[1].Name = "MBRI_ID";
        parameters[1].Value = lblBranch.Text;
        parameters[2] = new REWebService.ParameterValue();
        parameters[2].Name = "MPDI_Date";
        parameters[2].Value = lblDate.Text;
        parameters[3] = new REWebService.ParameterValue();
        parameters[3].Name = "ReportParameter1";
        parameters[3].Value = lblPOId.Text;
        rsExec.SetExecutionParameters(parameters, "en-us");
        Sendresults = rsExec.Render(format, deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
        MemoryStream ms = new MemoryStream(Sendresults);


        //To create a PDF
        if (format == "PDF")
        {
            Response.ContentType = "application/pdf";
            Response.AddHeader("Content-disposition", "inline;filename=output.pdf");
            Response.AddHeader("Content-Length", Sendresults.Length.ToString());
        }
        Response.OutputStream.Write(Sendresults, 0, Sendresults.Length);
        Response.OutputStream.Flush();
        Response.OutputStream.Close();

      }
       catch(Exception Ex)
       {
        throw Ex;
        }
   }

【问题讨论】:

  • 我拼凑了一个看起来像这样的按钮单击-protected void Button1_Click(object sender, EventArgs e) { Response.ContentType = "application/txt"; Response.AddHeader("Content-disposition", "inline;filename=output.pdf"); Response.AddHeader("Content-Length", "1"); Response.OutputStream.Write(new byte[] { 255 }, 0, 1); Response.OutputStream.Flush(); Response.OutputStream.Close(); } } 当我单击时它给了我一个弹出窗口-您是否尝试设置断点以确保您的代码被调用?跨度>
  • 感谢您的回答,但是我们在哪里将 byte[] Sendresults 分配给此代码以刷新报告。我们是否还需要添加任何特定的命名空间/程序集..?
  • @vinay 我会尝试 chrispy 的评论,看看是否会为您弹出窗口。可能是您有另一个问题阻止弹出窗口,当您调整 chrisp 的代码以执行您想要的操作时会更加清晰。

标签: c# asp.net sql-server sql-server-2008


【解决方案1】:

您可以使用 URL 访问,如下所述:http://msdn.microsoft.com/en-us/library/ms154040(v=sql.105).aspx

http://<Server Name>/reportserver?/Sales/YearlySalesSummary&rs:Format=PDF&rs:Command=Render

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2018-12-18
    • 2015-06-15
    • 2010-09-23
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多