【问题标题】:Steps to Pass parameters to crystal reports in C#在 C# 中将参数传递给水晶报表的步骤
【发布时间】:2013-11-12 13:11:30
【问题描述】:

你能告诉我将参数传递给C#win形式的水晶报表13的步骤是什么吗..

我的代码:

        //getting and set dataset to report   
        string sql = "select * from dbo.Trading_Order";
        DataRetriever dr = new DataRetriever();
        dr.getValueFromCustomer(sql);
        DataTable dtSum = dr.getDataTable();
        dsMyReprt k = new dsMyReprt();
        k.Tables.Remove("dtMyTable");
        dtSum.TableName = "dtMyTable";
        k.Tables.Add(dtSum);
        CrystalReport1 myDataReport = new CrystalReport1();

        //pass parameter

        ParameterFields paramFields = new ParameterFields();
        // ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

        ParameterField paramField = new ParameterField();
        ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
        paramField.Name = "@DTotal";
        paramDiscreteValue.Value = tot;
        paramField.CurrentValues.Add(paramDiscreteValue);
        paramFields.Add(paramField);

        paramField = new ParameterField(); 
        paramDiscreteValue = new ParameterDiscreteValue(); 
        paramField.Name = "@name";
        paramDiscreteValue.Value = name;
        paramField.CurrentValues.Add(paramDiscreteValue);
        paramFields.Add(paramField);

        crystalReportViewer1.ParameterFieldInfo = paramFields;

        myDataReport.SetDataSource(k);
        crystalReportViewer1.ReportSource = myDataReport;

获取和设置数据集部分正在工作 但是传递参数部分不起作用

【问题讨论】:

  • 什么不起作用?你试过什么?
  • gleng :工作的意思是,我将我的数据集表列添加到我的水晶报表中,它会在加载时显示。但是在我尝试传递该参数后,出现错误“参数不正确”..
  • 报表对象上没有“SetParameterValue”方法吗?
  • 你是这个意思吗? myDataReport.SetParameterValue("@Total", 120000); myDataReport.SetParameterValue("@name", "Nipun");我也试过这个,但有同样的错误调用“参数不正确”
  • 我需要对 CrystalReport1.rpt 文件进行任何更改吗?

标签: c# visual-studio-2010 crystal-reports


【解决方案1】:

我为此头疼了好几个星期...我必须准确地说我在 Crystal Reports 设计器中设置了一个 sql 查询。因此,我没有像您那样使用数据表,因此您必须考虑这一点。

好吧,@campagnolo_1 建议你:

ReportDocument myDataReport = new ReportDocument();
myDataReport.Load(@"C:\Reports\Report.rpt");

myDataReport.SetParameterValue("MyParameter1", "Hello1");
myDataReport.SetParameterValue("MyParameter2", "Hello2");
myDataReport.SetParameterValue("MyParameter3", "Hello3");

这是简短而甜蜜的解决方案。但是,在此之后,您必须确保已在 Crystal Reports 设计器中创建了 String 类型的 MyParameter1MyParameter2MyParameter3

  1. 重要的是要提到您必须在使用SetParameterValue 设置参数之前加载报告。

  2. 如果您的参数名称是MyParameter1,那么不要在前面添加@,如下所示:

    myDataReport.SetParameterValue("@MyParameter1", "Hello1"); // 你的程序会崩溃。

  3. 如果你得到The parameter is incorrect,那么你应该确保你给出的参数值的类型与参数类型完全相同。例如,如果您有一个参数StartDate 作为日期类型,那么请确保您给出的值是日期类型并且具有正确的日期格式。

此外,您还谈到了动态或静态字段。在您的情况下,我认为您手动输入值,那么这是静态字段。

希望对你有所帮助。

【讨论】:

  • 谢谢你 3 年后,我用谷歌搜索 SetParameterValue crash 发现你不应该把 @ 放在参数前面(第 2 点)。谢谢!
【解决方案2】:

您现在可能已经想出了解决方案。但这可能会有所帮助。您输入作为参数传递的值。

http://www.codeproject.com/Tips/753879/Automatically-Setting-a-Parameter-from-a-Csharp-Va

【讨论】:

    【解决方案3】:

    为什么不尝试这种方式并节省一些编码?

    ReportDocument myDataReport = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
    myDataReport.Load(@"C:\Reports\Report.rpt");
    
    myDataReport.SetParameterValue("MyParameter1", "Hello1");
    myDataReport.SetParameterValue("MyParameter2", "Hello2");
    myDataReport.SetParameterValue("MyParameter3", "Hello3");
    

    【讨论】:

    • 否..运行程序后要求输入参数值..我需要在CrystalReport1.rpt文件中进行任何更改吗?
    • 您必须确保参数名称的拼写与报告中的完全一致。
    • 是的,一样。我需要将该值类型更改为静态还是动态?我需要更改任何公式字段吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多