水晶报表查看器 - ASP.net

问题描述 投票:0回答:1

我正在尝试将 Crystal Report Viewer 添加到 asp.net web 应用程序。我们正在使用为我们的桌面应用程序创建的报告,因此它们已经创建并可以正常运行。我们在两个平台上使用相同的查询连接到相同的数据库,并且数据库和查询是在报表设计器中设置的。

下面是 asp.net 项目中 Visual Studio Pro 2015 中的一份报告的预览:

我已将以下行添加到我的 Reports.aspx 页面:

<CR:CrystalReportViewer ID="crptViewer" runat="server" AutoDataBind="true" />

我在应用目录根目录下添加了一个“Crystalreportviewers13”文件夹,里面是水晶报表安装的内容

我已将以下内容添加到我的 web.config 文件中:

<configuration>
  <configSections>
    <sectionGroup name="businessObjects">
      <sectionGroup name="crystalReports">
        <section name="rptBuildProvider" type="CrystalDecisions.Shared.RptBuildProviderHandler, CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304, Custom=null"/>
        <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler"/>
      </sectionGroup>
    </sectionGroup>
  </configSections>
   <businessObjects>
    <crystalReports>
      <rptBuildProvider>
        <add embedRptInResource="true"/>
     </rptBuildProvider>
    <crystalReportViewer>
              <add key="ResourceUri" value="/crystalreportviewers13" />
      </crystalReportViewer>
    </crystalReports>
  </businessObjects>

我已经根据不同的堆栈溢出建议对代码隐藏尝试了几种策略。到目前为止,这是我尝试过的:

点击按钮:

public partial class Reports : System.Web.UI.Page

{

ReportDocument rptDocument;
protected void Page_Load(object sender, EventArgs e)
    {
        string stack = "Page_Load()(Reports.aspx.cs)";
        try
        {
            if (Session["report"] != null)
            {
                crptViewer.ReportSource = Session["report"];

            }
        }
        catch (Exception EX)
        {
            IOClass.appendLog("Error in " + stack, EX.Message);
        }
    }

   //Button Click
   protected void generateReport(object sender, EventArgs e)
    {

        rptDocument = new ReportDocument();
        rptDocument.Load(Server.MapPath("~/Crystal/UserListing.rpt"));

        rptDocument.SetParameterValue("Company", 1);

        Session["report"] = rptDocument;


    }
}

和负载:

public partial class Reports : System.Web.UI.Page
{

    ReportDocument rptDocument;
    protected void Page_Load(object sender, EventArgs e)
    {
        string stack = "Page_Load()(Reports.aspx.cs)";
        try
        {
           rptDocument = new ReportDocument();
           rptDocument.Load(Server.MapPath("~\\Crystal\\UserListing.rpt"));
           crptViewer.ReportSource = rptDocument;

           //I have tried with and without the following:
           //crptViewer.DataBind();
           //and
           //crptViewer.RefreshReport();
        }
        catch (Exception EX)
        {
            IOClass.appendLog("Error in " + stack, EX.Message);
        }
    }
}

在两种情况下加载页面时,这就是我得到的:

我正在对加载函数进行异常记录,但我没有得到任何异常。

知道我在这里做错了什么吗?如果我可以提供任何其他信息,请告诉我。

谢谢你的时间

asp.net crystal-reports
1个回答
0
投票

在aspx上删除

<asp:Content>
并像这样使用默认的 html 页面...

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="myproject.WebForm1" %>

<%@ Register assembly="CrystalDecisions.Web, Version=13.0.3500.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" namespace="CrystalDecisions.Web" tagprefix="CR" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
        <script type="text/javascript" src="/crystalreportviewers13/js/crviewer/crv.js">
        </script> 
</head>
<body>
    <form id="form1" runat="server">
        <div>
		    <asp:Button ID="btnShowReport" runat="server" Text="Show Report" OnClick="btnShowReport_Click" />
            <CR:CrystalReportViewer ID="JobRepairReportViewer" runat="server" AutoDataBind="true" />
        </div>
    </form>
</body>
</html>

在 aspx.cs 中加载

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Data;
using System.Diagnostics;
using CrystalDecisions.CrystalReports.Engine;

namespace iconequipment
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnShowReport_Click(object sender, EventArgs e)
        {
            ReportDocument rpt = new ReportDocument();
            rpt.Load(Server.MapPath("JobRepairReport.rpt"));
            //rpt.SetParameterValue("JobID", this.txtJobID.Text);
            this.JobRepairReportViewer.ReportSource = rpt;
            this.JobRepairReportViewer.RefreshReport();
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.