如何动态地将报告和connectioninfo分配给crystal report

时间:2009-10-16 20:00:13

标签: asp.net crystal-reports

我完全迷失在这一个 -

我有一个.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>

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我只是略过了它,我不知道这是否是你的整个问题,但我看到的一件事是:

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

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

相关问题