我已经搜索了高低,以解决这个问题,所以如果这是一个愚蠢的问题或重复的问题,我会提前道歉。
所以我有这个水晶报告,不幸的是我不知道我在哪个版本,大部分时间都可以工作,并在完全相同的条件下随机打破。在它中断的时候,当我用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,它说它是在它添加参数时它继续打破。
感谢您的帮助!
答案 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)
使用此代码是因为您已将参数添加到报表中,您只需设置每个参数的值。