【问题标题】:Passing Multiple parameter values to Crystal Report using Stored Procedure使用存储过程将多个参数值传递给 Crystal Report
【发布时间】:2014-11-28 05:34:32
【问题描述】:

我正在使用 Visual Studio 2012 窗口窗体应用程序。 我使用接受三个参数的存储过程创建了一个带有 Crystal 报表的报表 即@DateFrom、@DateTo 和@District,我必须从c# 代码中传递这些参数。

我有以下代码,它只接受一个参数而不是多个参数,请帮助我

private void btn_Preview_Click(object sender, EventArgs e)
{
                string parm_From = "01-07-2014";
                string param_To = "30-06-2015";
                string param_District = "DistrictName";
                ReportDocument reportDocument = new ReportDocument();
                ParameterField paramField = new ParameterField();
                ParameterFields paramFields = new ParameterFields();
                ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

                paramField.CurrentValues.Add(parm_From);
                paramFields.Add(paramField);
                crystalReportViewer1.ParameterFieldInfo = paramFields;
                reportDocument.Load(@"\GenPensionReport.rpt");
                crystalReportViewer1.ReportSource = reportDocument;
                crystalReportViewer1.Refresh(); 
}

我哪里出错了?

【问题讨论】:

    标签: c# crystal-reports


    【解决方案1】:

    加载报表文档后,只需调用:

    reportDocument.SetParameterValue("DateFrom", dateFrom);
    reportDocument.SetParameterValue("DateTo", dateTo);
    reportDocument.SetParameterValue("District", district);
    

    编辑

    // The names must match what Crystal expects, So if they contain @ you must include them.
    reportDocument.SetParameterValue("@DateFrom", dateFrom);
    reportDocument.SetParameterValue("@DateTo", dateTo);
    reportDocument.SetParameterValue("@District", district);
    

    这只是将参数值设置到报告中。

    【讨论】:

    • 这些是我在报告中使用的存储过程参数,它们是“@DateFrom”、“@DateTo”和“@District”,在应用您的方法后,我得到了空白报告。
    • 从 Crystal 运行验证数据库菜单,它应该为您创建这些参数,然后无论它创建什么参数名称,修改我的代码示例以匹配报表现在期望的参数。在报表设计器预览中对其进行测试以确保其正常工作。
    • 这三个参数已经用“@”符号创建,当我验证数据库时,它要求我提供这三个参数,之后它给了我准确的结果,但是通过 c# 它给了我空白报告.
    • 然后你想要“@DateFrom”等等。
    • 感谢 reckface ,存在日期和时间格式问题 i-e mm/dd/yyy h:m:s ,现在可以使用
    【解决方案2】:
            CrystalReport1 objRpt = new CrystalReport1();
            objRpt.SetDataSource(ds);
            ParameterFields pfield = new ParameterFields();
            ParameterField ptitle = new ParameterField();
            ParameterField ptitle1 = new ParameterField();
            ParameterField ptitle2 = new ParameterField();
            ParameterDiscreteValue pvalue;
            ParameterDiscreteValue pvalue1;
            ParameterDiscreteValue pvalue2;
            ptitle.ParameterFieldName = "pdate";//pdate is a crystal report parameter name
            ptitle.CurrentValues.Clear();
            pvalue = new ParameterDiscreteValue();
            ptitle.CurrentValues.Add(pvalue);
            pvalue.Value = txtcolor.Text.ToString();
    
            pfield.Add(ptitle);
    
            ptitle1.ParameterFieldName = "no";//no is a crystal report parameter name
            ptitle1.CurrentValues.Clear();
            pvalue1 = new ParameterDiscreteValue();
            ptitle1.CurrentValues.Add(pvalue1);
            pvalue1.Value=txtno.Text.ToString();
    
            pfield.Add(ptitle1);
    
            ptitle2.ParameterFieldName = "date";//date is a crystal report       parameter name
            ptitle2.CurrentValues.Clear();
            pvalue2 = new ParameterDiscreteValue();
            ptitle2.CurrentValues.Add(pvalue2);
            pvalue2.Value = textBox1.Text.ToString();
    
            pfield.Add(ptitle2);
    
            crystalReportViewer1.ParameterFieldInfo = pfield;
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多