.net 将数据推送到Crystal报表时不显示参数值?

.net 将数据推送到Crystal报表时不显示参数值?,.net,crystal-reports,.net,Crystal Reports,我有一个基于参数化存储过程的Crystal报告。报告显示每个参数的值以及数据。在正常使用中,一切正常 现在,我需要向报表应用程序添加一些额外的功能,以便对存储过程返回的数据进行额外的处理。为了实现这一点,我想从我的C代码中调用该过程,并将数据连同参数值一起推送到报表中 作为概念证明,我正在用虚拟数据构建一个数据表,并将其推送到报告中。参数值不会显示在报告中,但会显示虚拟数据。我做错了什么 我使用Crystal Reports 11.5构建报告,使用Visual Studio 2010构建应用程序

我有一个基于参数化存储过程的Crystal报告。报告显示每个参数的值以及数据。在正常使用中,一切正常

现在,我需要向报表应用程序添加一些额外的功能,以便对存储过程返回的数据进行额外的处理。为了实现这一点,我想从我的C代码中调用该过程,并将数据连同参数值一起推送到报表中

作为概念证明,我正在用虚拟数据构建一个数据表,并将其推送到报告中。参数值不会显示在报告中,但会显示虚拟数据。我做错了什么

我使用Crystal Reports 11.5构建报告,使用Visual Studio 2010构建应用程序。我使用的代码是:

using System;
using System.Data;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

namespace ReportTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var fakeTable = new DataTable("report_for_date;1");
            fakeTable.Columns.Add("Name", typeof(string));
            fakeTable.Columns.Add("Amount", typeof(decimal));

            var row = fakeTable.NewRow();
            row["Name"] = "TEST";
            row["Amount"] = 1000;

            fakeTable.Rows.Add(row);

            var rep = new ReportDocument();

            rep.Load("reportfordate.rpt", OpenReportMethod.OpenReportByDefault);

            rep.SetDataSource(fakeTable);

            rep.SetParameterValue("@date", new DateTime(2010, 05, 21) );
            rep.SetParameterValue("@threshold",5);

            // This code prints out the expected values (set above)
            foreach (ParameterField p in rep.ParameterFields)
                foreach(ParameterDiscreteValue v in p.CurrentValues)
                    Console.WriteLine("{0}={1}", p.Name, v.Value);   

            // The report PDF is generated but does not display the parameter values
            rep.ExportToDisk(ExportFormatType.PortableDocFormat,"c:/temp/hack.pdf");
        }
    }
}

你的想法应该行得通。您应该能够用C语言收集数据,然后将其推送到Crystal报表

我已经试用了你的代码,它似乎对我有用。唯一不同的是,我通常不使用SetParameterValue,而是单独构建ParameterField对象,然后将它们添加到ParameterFields对象,然后将该对象传递到报表。这是更乏味的,可能没有任何比这种方式更好

回到你的问题,我想建议你确保参数名用@符号拼写正确,但如果是这样的话,它会给你一个错误

唯一的另一件事是确保报告中包含参数字段,并且这些字段没有附加任何抑制逻辑,但这有点愚蠢,我怀疑这种情况是否会发生

总而言之,看起来你做得不错,你的参数字段应该会显示出来。作为另一个测试,您可以尝试使用crystal viewer创建一个简单的表单应用程序,以查看其外观。这将使出口部分脱离混合,因为出口过程中有时似乎会发生奇怪的事情

我知道这可能没什么帮助,但我希望你能从中找到一些有用的东西