【问题标题】:How to dynamically assign report and connectioninfo to crystal report如何将报表和连接信息动态分配给水晶报表
【发布时间】:2010-12-07 11:58:06
【问题描述】:

我完全迷失了这个--

我有一个可以自行运行的 .Rpt 文件。该报告文件采用 4 个参数并连接到一个 oracle 数据库。我已正确设置所有数据库代码。所以我认为。

我终其一生都无法将此报告文件连接到该连接并在我的 ASP.NET 网页上查看该报告。

当我运行此代码时,无论如何,我都会得到 Crystalreportviewer 控件所在的文本无效指针。我在 ASP.NET 3.5 项目中运行 Crystal Reports 2008 SP2。我愿意接受建议链接到查看报告的彻底方法(包括指定参数、连接信息和处理报告文档)的人,看看我是如何完全陌生的。

我需要这个过程是动态的,因为将来我将动态设置报告文件、参数、数据库信息等......

提前谢谢大家。

我的代码背后:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using CrystalDecisions.Web;

namespace AMR
{
    public partial class RptParameter2 : System.Web.UI.Page
    {
        ReportDocument crReportDocument;
        ConnectionInfo connectionInfo;
        public enum ReportState { NotSet, FromStart, FromSession,FromPostBack };
        public void Page_Init(object sender, EventArgs e)
        {
            if (!Page.IsPostBack && !Page.IsCallback)
            {
                LoadReport(ReportState.FromStart);

            }
            else
            {
                LoadReport(ReportState.FromPostBack);
            }

        }
        public void LoadReport(ReportState rptState)
        {
            if (rptState != ReportState.FromPostBack)
            {
                if (crReportDocument != null)
                {
                    crReportDocument.Close();
                    crReportDocument.Dispose();
                    crReportDocument = null;
                }
                crReportDocument = new ReportDocument();

                if (rptState == ReportState.FromSession)
                    crReportDocument = (ReportDocument)Session["cr"];
                connectionInfo = new ConnectionInfo();
                ParameterField paramField1 = new ParameterField();
                ParameterField paramField2 = new ParameterField();
                ParameterField paramField3 = new ParameterField();
                ParameterField paramField4 = new ParameterField();
                ParameterFields paramFields = new ParameterFields();
                ParameterDiscreteValue paramDiscreteValue1 = new ParameterDiscreteValue();
                ParameterDiscreteValue paramDiscreteValue2 = new ParameterDiscreteValue();
                ParameterDiscreteValue paramDiscreteValue3 = new ParameterDiscreteValue();
                ParameterDiscreteValue paramDiscreteValue4 = new ParameterDiscreteValue();
                //p1
                paramField1.Name = "Siebel Position";
                paramDiscreteValue1.Value = txtAvailPos.Text;
                paramField1.CurrentValues.Add(paramDiscreteValue1);
                paramFields.Add(paramField1);
                //p2
            paramField2.Name = "DETAIL_LEVEL";
            paramDiscreteValue2.Value = ddlDetailLvl.SelectedValue;
                paramField2.CurrentValues.Add(paramDiscreteValue2);
                paramFields.Add(paramField2);
                //p3
                paramField3.Name = "RPT_MONTH";
                paramDiscreteValue3.Value = ddlMonth.SelectedValue;
                paramField3.CurrentValues.Add(paramDiscreteValue3);
                paramFields.Add(paramField3);
                //p4
                paramField4.Name = "RPT_YEAR";
                paramDiscreteValue4.Value = txtYear.Text;
                paramField4.CurrentValues.Add(paramDiscreteValue4);
                paramFields.Add(paramField4);
                //loading
                CrystalReportViewer1.ReportSource = crReportDocument;
                crReportDocument.Load(Server.MapPath("~/myreport.rpt"));
                connectionInfo.ServerName = "myserver";

                connectionInfo.DatabaseName = System.Configuration.ConfigurationSettings.AppSettings["Crystal_Database"];
                connectionInfo.UserID = System.Configuration.ConfigurationSettings.AppSettings["Crystal_Username"];
                connectionInfo.Password = System.Configuration.ConfigurationSettings.AppSettings["Crystal_Password"];

                SetDBLogonForReport(connectionInfo);
                CrystalReportViewer1.ParameterFieldInfo = paramFields;
                CrystalReportViewer1.EnableDatabaseLogonPrompt = false;
                CrystalReportViewer1.EnableParameterPrompt = false;
                CrystalReportViewer1.Visible = true;
                Session["cr"] = crReportDocument;
            }
            else//reportstate from postback
            {
                CrystalReportViewer1.ReportSource = (ReportDocument)Session["cr"];
            }
        }
        private void SetDBLogonForReport(ConnectionInfo connectionInfo)
        {
            TableLogOnInfos tableLogOnInfos = CrystalReportViewer1.LogOnInfo;
            foreach (TableLogOnInfo tableLogOnInfo in tableLogOnInfos)
            {
                tableLogOnInfo.ConnectionInfo = connectionInfo;

            }



        }
        public void btnyclick(object sender, EventArgs e)
        {
            LoadReport(ReportState.FromSession);

        }
        public void btnClose_Click(object sender, EventArgs e)
        {

        }
    }
}

我的页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RptParameter2.aspx.cs" Inherits="AMR.RptParameter2" %>
<%@ Register Assembly="CrystalDecisions.Web, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"  Namespace="CrystalDecisions.Web" TagPrefix="CR"  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Crystal Test</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <div class="floatbox">

 <p>  &nbsp;  Enter the Employee Position : <asp:TextBox ID="txtAvailPos" runat="server" Width="125" > </asp:TextBox> 
 <p style="margin-left: 80px"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                 Detail Level : <asp:DropDownList ID="ddlDetailLvl" runat="server"  >
                                                                                                <asp:ListItem Text="SELF" Value="SELF" Selected="True"></asp:ListItem>
                                                                                                <asp:ListItem Text="TEAM" Value="TEAM" ></asp:ListItem>
                                                                                             </asp:DropDownList> </p>  
 <p style="margin-left: 120px">&nbsp;&nbsp;&nbsp;                        Month : <asp:DropDownList ID="ddlMonth" runat="server" >
                                                                                    <asp:ListItem Text="01" Value="01" ></asp:ListItem>
                                                                                    <asp:ListItem Text="02" Value="02" ></asp:ListItem>
                                                                                    <asp:ListItem Text="03" Value="03" ></asp:ListItem>
                                                                                    <asp:ListItem Text="03" Value="04" ></asp:ListItem>
                                                                                    <asp:ListItem Text="05" Value="05" ></asp:ListItem>
                                                                                    <asp:ListItem Text="06" Value="06" ></asp:ListItem>
                                                                                    <asp:ListItem Text="07" Value="07" ></asp:ListItem>
                                                                                    <asp:ListItem Text="08" Value="08" ></asp:ListItem>
                                                                                    <asp:ListItem Text="09" Value="09" ></asp:ListItem>
                                                                                    <asp:ListItem Text="10" Value="10" ></asp:ListItem>
                                                                                    <asp:ListItem Text="11" Value="11" ></asp:ListItem>
                                                                                    <asp:ListItem Text="12" Value="12" ></asp:ListItem>
                                                                                 </asp:DropDownList> </p>  
 <p style="margin-left: 120px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                         Year : <asp:TextBox ID="txtYear" runat="server" Text="2009" Enabled="false" Width="35" > </asp:TextBox></p>  
<p style="margin-left: 160px"> <asp:Button runat="server" ID="btny" Text="Show Report" OnClick="btnyclick" /> </p>
<asp:Button runat="server" ID="btnclose" Text="Close" OnClick="btnClose_Click" /><br />
    <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" 
            AutoDataBind="true"   />
    </div>
    </div>
    </form>
</body>
</html>

【问题讨论】:

    标签: asp.net crystal-reports


    【解决方案1】:

    事实证明,我们使用的报表是使用 .qry 文件的旧版 Crystal Reports(我认为是 8)报表。在我们将查询转换为命令对象(水晶)后,一切正常!

    【讨论】:

    • +1 帮助您解决问题。我打算再调查一次,但最近家庭紧急情况让我很忙。很高兴你明白了。
    【解决方案2】:

    我只是略读了一下,我不知道这是否是您的全部问题,但我看到的一件事是:

    //p2
    paramField2.CurrentValues.Add(paramDiscreteValue2);
    paramFields.Add(paramField2);
    paramField2.CurrentValues.Add(paramDiscreteValue2);
    paramFields.Add(paramField2);
    

    纠正这个并再试一次。如果您仍有问题,请告诉我,我会进一步深入研究。

    【讨论】:

    • 谢谢!但我仍然遇到同样的错误。感谢您对此的调查。
    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多