日期范围公式

时间:2010-12-14 20:00:43

标签: crystal-reports parameters

第1页:

从日期:TXTBOX1到日期:TXTBOX2

btnSubmit按钮-CLICK { Server.Transfer的( “page2.aspx”); }

第2页:

if(PreviousPage!= null)         {             TextBox txt1 = PreviousPage.FindControl(“TXTBOX1”)作为TextBox;             TextBox txt2 = PreviousPage.FindControl(“TXTBOX2”)作为TextBox;

        if (txt1.Text.Length != 0 && txt2.Text.Length != 0)
        {

         ReportDocument cryRpt = new ReportDocument();
         cryRpt.Load("MyReport.rpt");

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

            crParameterDiscreteValue.Value = txt1.Text + txt2.Text;
            crParameterFieldDefinitions =
            cryRpt.DataDefinition.ParameterFields;
            crParameterFieldDefinition =
            crParameterFieldDefinitions["MyParameter"];
            crParameterValues = crParameterFieldDefinition.CurrentValues;

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

            CrystalReportViewer1.ReportSource = cryRpt;

        }

     }

公式编辑器中的公式:

{Command.Date}> = {?MyParameter}和{Command.Date}< = {?MyParameter}

工作正常如果单个日期显示报告。不适用于日期范围。

有什么建议吗?我在公式/代码中的错误???

2 个答案:

答案 0 :(得分:0)

您应该将日期字段作为单独的参数传递,并在公式编辑器中引用它们,如下所示:

{Command.Date} >= {?ParamDateFrom} and {Command.Date} <= {?ParamDateTo}

答案 1 :(得分:0)

使用ParameterRangeValue而不是ParameterDiscreteValue,并将StartValue和EndValue属性设置为开始日期和结束日期。

更新: 以下是一些用于测试报告的示例代码:

     ParameterFieldDefinitions paramDefinitions =  report.DataDefinition.ParameterFields;

     ParameterFieldDefinition paramDefinition = paramDefinitions["DateRange"];
     ParameterValues paramValues = paramDefinition.CurrentValues;

     ParameterRangeValue rangeValue = new ParameterRangeValue();
     rangeValue.StartValue = new DateTime(2010, 10, 31);
     rangeValue.EndValue = new DateTime(2010, 12, 15);

     paramValues.Add(rangeValue); ;

     paramDefinition.ApplyCurrentValues(paramValues);

确保您的MyParameter是范围值,并且Crystal中的select语句为dateField = {?MyParameter}