我正在开发一个应用程序,该应用程序来自多次迁移。它始于 Visual Studio 2010 和 Crystal Report 9,现在位于 Visual 2013。
最新版本的代码丢失了,我正在恢复备份。
我在本地 PC Crystal 版本 13.0.26 中安装了 32 位和 64 位版本,我可以在其中编辑 Visual Studio 12 和 13 中的报告,还可以运行设计器中的报告。
这是我安装的
所有报告都很简单,接收一个参数来对数据库执行一个Select。 该参数称为@ID
我遇到的问题是,当我从两个 Visual 运行它时,都会出现消息“缺少参数值”。
首先我认为这是创建报告的版本的问题,但我创建了一个新报告,同样的事情发生了。即使在此版本的 Crystal 中创建的报告也不会收到参数。
我认为问题在于参数如何传递。我认为传递它的方式从版本9更改为13。这是我在Web.Config和调用它的页面上配置的。
<assemblies>
<add assembly="CrystalDecisions.Web, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.Shared, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.ReportSource, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.ReportAppServer.Controllers, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.ReportAppServer.DataDefModel, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.CrystalReports.Engine, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.ReportAppServer.ClientDoc, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</assemblies>
这是我的 aspx。
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="REPVisitasDiariasTecnicos.aspx.cs" Inherits="REPVisitasDiariasTecnicos" %>
<%@ Register TagPrefix="CR" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<div>
<table style="width: 100%">
<tr>
<td>
<CR:CrystalReportViewer ID="CrystalReportViewer" runat="server"
AutoDataBind="true"
EnableDatabaseLogonPrompt="False" EnableParameterPrompt="False"
ToolPanelView="None" HasToggleGroupTreeButton="False" HasToggleParameterPanelButton="False"
DisplayStatusbar="False" HasCrystalLogo="False" HasDrilldownTabs="False"
HasDrillUpButton="False" HasGotoPageButton="False" HasZoomFactorList="False"
/>
</td>
</tr>
</table>
</div>
<br />
</asp:Content>
这是我的代码。
private void ConfigureCrystalReports()
{
oReport = new ReportDocument();
string reportPath;
reportPath = Server.MapPath(@"report.rpt");
oReport.FileName = reportPath;
// establish the connection
string _connectionString = ConfigurationManager.ConnectionStrings["WEB"].ConnectionString;
System.Data.SqlClient.SqlConnectionStringBuilder SConn = new System.Data.SqlClient.SqlConnectionStringBuilder(_connectionString);
// establish the connection with the report
ConnectionInfo connectionInfo = new ConnectionInfo() { ServerName = SConn.DataSource, DatabaseName = SConn.InitialCatalog, UserID = SConn.UserID, Password = SConn.Password };
CrystalReportViewer.ReportSource = oReport;
foreach (CrystalDecisions.CrystalReports.Engine.Table t in oReport.Database.Tables)
{
TableLogOnInfo boTableLogOnInfo = t.LogOnInfo;
boTableLogOnInfo.ConnectionInfo = connectionInfo;
t.ApplyLogOnInfo(boTableLogOnInfo);
}
ArrayList arrayList = new ArrayList();
//Add the parameter to a Lisst
arrayList.Add(31302);
ParameterFields parameterFields= CrystalReportViewer.ParameterFieldInfo;
SetCurrentValuesForParameterField(parameterFields, arrayList);
}
private static void SetCurrentValuesForParameterField(ParameterFields parameterFields, ArrayList arrayList)
{
ParameterValues currentParameterValues = new ParameterValues();
int i = 0;
foreach (object submittedValue in arrayList)
{
ParameterDiscreteValue paramValor = new ParameterDiscreteValue();
ParameterField param = parameterFields[i];
paramValor.Value = submittedValue.ToString();
param.CurrentValues.Add(paramValor);
i++;
}
}
我在这个博客中读了很多内容,我没有子报告,没有链接值..只有 ID。
我知道更改版本时需要考虑很多事情。
我想不出还有什么可以设置的。
知道我做错了什么吗?
谢谢
我解决了
阅读这篇文章帖子
我替换了这个函数,我在其中设置参数
SetCurrentValuesForParameterField(parameterFields, arrayList);
对于这条线
oReport.SetParameterValue(0, 24234);
在此版本的 Crystal Report 中,使用
SetParameter
传递参数