Asp.net 将参数传递到Crystal报表的索引无效

Asp.net 将参数传递到Crystal报表的索引无效,asp.net,crystal-reports,Asp.net,Crystal Reports,下面的代码可以显示正确的报告, 但将有错误消息无效索引 如果我对RD.SetParameterValue(“@Transaction_date_field”,Calendar1.SelectedDate.ToSortDateString())进行注释,它不会有错误,但不能显示报告 如何修复它 try { RD = new ReportDocument(); RD.Load(@"D:\Data\My Documents\Visual

下面的代码可以显示正确的报告, 但将有错误消息无效索引

如果我对RD.SetParameterValue(“@Transaction_date_field”,Calendar1.SelectedDate.ToSortDateString())进行注释,它不会有错误,但不能显示报告

如何修复它

try
        {
            RD = new ReportDocument();
            RD.Load(@"D:\Data\My Documents\Visual Studio 2008\WebSites\Carpark\Daily_CrystalReport.rpt");
            //RD.Load(@".\Daily_CrystalReport.rpt");


            ParameterFieldDefinitions crParameterFieldDefinitions;
            ParameterFieldDefinition crParameterFieldDefinition;
            ParameterValues crParameterValues = new ParameterValues();
            ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();

            crParameterDiscreteValue.Value = Calendar1.SelectedDate.ToShortDateString();
            crParameterFieldDefinitions = RD.DataDefinition.ParameterFields;
            crParameterFieldDefinition = crParameterFieldDefinitions["Transaction_date_field"];
            crParameterValues = crParameterFieldDefinition.CurrentValues;

            crParameterValues.Clear();
            crParameterValues.Add(crParameterDiscreteValue);
            crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);

            DailyReport_CrystalReportViewer.ReportSource = RD;

            RD.SetParameterValue("@Transaction_date_field", Calendar1.SelectedDate.ToShortDateString());
            DailyReport_CrystalReportViewer.EnableParameterPrompt = false;

            DailyReport_CrystalReportViewer.RefreshReport();
            //RD.Dispose();
        }
        catch (Exception ex)
        {
            Error_Label.Text = Error_Label.Text + " " + ex.Message;
            //Error_Label.Text = "";
        }
CrystalReport002

我认为您可以使用如下方式将参数传递到报告:

var value = new ParameterDiscreteValue();
value.Value = Calendar1.SelectedDate.ToShortDateString();
RD.ParameterFields["Transaction_date_field"].CurrentValues.Add(value);

我在使用crystal时遇到了很多问题,因此我定义了一种默认的处理方法。如果您已经休息了,您可以在这里检查:我按照您的方式做了,现在我得到了一个nullreference错误。CrystalDecisions.Shared.ParameterFields.this[string]。get返回null。水晶报告很烂。可惜的是,唯一的选择是更昂贵的。我检查了你的链接,我简直不明白为什么我们需要一个数据表和一个字典。为什么我们需要这两个字段,以及哪一个需要真正的数据?最后,我设法让参数字段工作。我将对所有内容使用参数字段。我不知道如何推送数据表,也不在乎。