Visual Studio 2013 Crystal 报告错误“缺少参数值”

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

我正在开发一个应用程序,该应用程序来自多次迁移。它始于 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。

我知道更改版本时需要考虑很多事情。

我想不出还有什么可以设置的。

知道我做错了什么吗?

谢谢

c# visual-studio-2013 crystal-reports
1个回答
0
投票

我解决了

阅读这篇文章帖子

我替换了这个函数,我在其中设置参数

SetCurrentValuesForParameterField(parameterFields, arrayList);

对于这条线

oReport.SetParameterValue(0, 24234);

在此版本的 Crystal Report 中,使用

SetParameter
传递参数

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