4

此代码在我的计算机上完美运行,但在客户端计算机上导致错误。

cr.SetParameterValue("fromDate", fromDatePicker.Value.Date);
cr.SetParameterValue("toDate", toDatePicker.Value.Date);
cr.SetParameterValue("todayRate", Common.GetTodayRate());

错误是

Invalid Parameter value: exceeds the Min or Max or conflicts with existing value or edit mask

在这里,fromDate 和 toDate 是“日期”类型的参数。而 todayRate 是“数字”类型的参数。

有什么办法可以解决这个问题?

4

1 回答 1

0

该问题与从应用程序代码到 CR 的参数输入的文化敏感处理有关。当涉及到特定情况下的多语言支持时,CR 显然设计得很糟糕,例如这种情况。

解决方案虽然丑陋,但如下。

对于报告中的每个或参数字段Date,请执行以下操作:TimeDateTime

  1. 在 CR 设计器中,将参数字段的类型更改为String
  2. 创建一个新的公式字段并将其值设置为以下之一:

    CDate({?ParamFieldName}) // Date
    CTime({?ParamFieldName}) // Time
    CDateTime({?ParamFieldName}) // DateTime
    

    取决于原始参数字段类型,参数字段ParamFieldName的名称在哪里。

  3. 在您的应用程序代码中,通过以下方式之一传递参数值:

    // Date
    report.SetParameterValue(
        "ParamFieldName",
        DateTimeObject.ToShortDateString().TrimEnd('.'));
    
    // Time
    report.SetParameterValue(
        "ParamFieldName",
        DateTimeObject.ToShortTimeString());
    
    // DateTime
    report.SetParameterValue(
        "ParamFieldName",
        string.Format("{0} {1}",
            DateTimeObject.ToShortDateString().TrimEnd('.'),
            DateTimeObject.ToShortTimeString()));
    
  4. 在 CR 设计器中,插入公式字段而不是参数字段,并在 CR 设计器中设置它们的显示格式。

这已经在几种文化中进行了测试。

日期字符串中的结束点正在被修剪,因为 CR 由于未知原因无法处理该点,即使在日期结尾有点的文化中(即塞尔维亚语 - 14.3.2015.

于 2015-03-14T17:49:35.550 回答