设置参数值时,Crystal Report会随机中断

时间:2014-05-29 15:06:31

标签: vb.net crystal-reports

我已经搜索了高低,以解决这个问题,所以如果这是一个愚蠢的问题或重复的问题,我会提前道歉。

所以我有这个水晶报告,不幸的是我不知道我在哪个版本,大部分时间都可以工作,并在完全相同的条件下随机打破。在它中断的时候,当我用ApplyCurrentValue设置参数时,它立即弹出一个窗口,询问所有参数(好像没有设置)。当我按退出时,它会打开

  

System.NullReferenceException:未将对象引用设置为实例   一个对象。在   CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition.ApplyCurrentValues(的parameterValues   currentValues)

以下是代码。此外,我传递的每个参数都是正确的值,因此它们都不为null并且实际上具有值。

rpt.SetDataSource(ds)
crv.ReportSource = rpt

AddCrystalReportParameters("EntityName", entityName)
AddCrystalReportParameters("dtFrom", datFrom.ToShortDateString())
AddCrystalReportParameters("dtTo", datTo.ToShortDateString())
AddCrystalReportParameters("RectEntityDesc", rectEntityDesc)

这是我使用的方法。

Sub AddCrystalReportParameters(ByVal sFieldName As String, ByVal sValue As String)
    Dim discreteValue As New ParameterDiscreteValue()
    Dim values As New ParameterValues()

    values = rpt.DataDefinition.ParameterFields(sFieldName).CurrentValues()
    discreteValue.Value = sValue 'Assign parameter
    values.Add(discreteValue)
    rpt.DataDefinition.ParameterFields(sFieldName).ApplyCurrentValues(values)
End Sub

因为它在断裂时是如此随机,所以它使测试非常困难。我想也许报告没有被加载,但是我检查了rpt.IsLoaded,它说它是在它添加参数时它继续打破。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果使用SetDataSource

设置数据源,则无需设置参数

答案 1 :(得分:0)

首先在报表中创建参数,如您所述,使用名称(EntityName,dtFrom,dtTo和RectEntityDesc)。然后将这些参数作为对象添加到报表中,然后在代码中将值设置为以下代码:

    rpt.SetParameterValue("@EntityName", EntityName)
    rpt.SetParameterValue("@dtFrom", dtFrom.SelectedDate)
    rpt.SetParameterValue("@dtTo", dtTo.SelectedDate)
    rpt.SetParameterValue("@RectEntityDesc", rectEntityDesc)

使用此代码是因为您已将参数添加到报表中,您只需设置每个参数的值。