Hi
We are Developing with VS2008 (Visual Basic) and are using the Crystal Reports 2008 SP 1 runtime.
Ouer Report code works primerly like this:
1.) we open the Report with
g_oCRPReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument
g_oCRPReport.Load(sReportFileName)
2.) We set the DB-Connection
3.) We set some report spezific parameters
4.) We set all the remaining paraeters, with have no values set to an default value, in order to prevent showing the user an dialog witch asks for some parameters, he dosn't know anything about.
5.) Display the report in a 'CrystalDecisions.Windows.Forms.CrystalReportViewer'
Sometimes, wenn we try to set the parameter fields, we get the folowing error, in the beginning of Step 4:
At Line: 3
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition.get_CurrentValues()
bei CrystalDecisions.CrystalReports.Engine.InternalParameterValues..ctor(ParameterFieldDefinition fieldDef, Boolean isCurrentValues)
bei CrystalDecisions.CrystalReports.Engine.InternalParameterField..ctor(ParameterFieldDefinition field)
bei CrystalDecisions.CrystalReports.Engine.InternalParameterFields..ctor(ParameterFieldDefinitions parameterFields)
bei CrystalDecisions.CrystalReports.Engine.ReportDocument.get_ParameterFields()
bei ITS.Reports.modReport.SetDefaultParameterValues(ReportDocument m_Report
Other errors, we get less often are:
At Line: 2
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei CrystalDecisions.CrystalReports.Engine.DataDefinition.get_ParameterFields()
and
At Line: 27 and 29
System.NullReferenceException: Object reference not set to an instance of an object.
at CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition.get_EnableAllowEditingDefaultValue()
The Code of the function from Step 4:
Friend Sub SetDefaultParameterValues(ByVal m_Report As CrystalDecisions.CrystalReports.Engine.ReportDocument)
Dim blnOK As Boolean
Dim lngIndex As Integer
Dim pf As CrystalDecisions.Shared.ParameterField = Nothing
Dim pfd As CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition
Dim pvs As CrystalDecisions.Shared.ParameterValues
Dim pfs As CrystalDecisions.Shared.ParameterFields
Dim lngErrNr As Integer = -1
Dim strErrDesc As String = Nothing
If m_Report Is Nothing Then
Throw New System.ArgumentNullException("m_Report", "Report Object not Set")
End If
Try
1: lngIndex = -3
2: If m_Report.DataDefinition.ParameterFields IsNot Nothing Then
3: pfs = m_Report.ParameterFields
4: If pfs.Count > 0 Then
5: lngIndex = -2
6: For Each pf In pfs 'crv9.ParameterFieldInfo
7: If True Then 'pf.ReportName = m_Report.Name Then
8: lngIndex = pfs.IndexOf(pf)
9: If lngIndex >= 0 Then
10: pfd = m_Report.DataDefinition.ParameterFields(lngIndex)
11: If Not pfd Is Nothing AndAlso _
pfd.Kind = CrystalDecisions.Shared.FieldKind.ParameterField Then
12: If Not pf.HasCurrentValue Then
13: If pf.ReportName = m_Report.Name Then
14: blnOK = True
Else
15: blnOK = Not pfd.IsLinked
End If
16: If blnOK Then
17: pvs = New CrystalDecisions.Shared.ParameterValues
18: If pf.EnableNullValue Then
19: pvs.AddValue(System.DBNull.Value)
Else
20: Select Case pf.ParameterValueType
Case CrystalDecisions.Shared.ParameterValueKind.BooleanParameter
21: pvs.AddValue(False)
Case CrystalDecisions.Shared.ParameterValueKind.CurrencyParameter, CrystalDecisions.Shared.ParameterValueKind.NumberParameter
22: pvs.AddValue(0)
Case CrystalDecisions.Shared.ParameterValueKind.DateParameter, CrystalDecisions.Shared.ParameterValueKind.DateTimeParameter, CrystalDecisions.Shared.ParameterValueKind.TimeParameter
23: pvs.AddValue(New Date)
Case CrystalDecisions.Shared.ParameterValueKind.StringParameter
24: pvs.AddValue("")
Case Else
25: Debug_Assert(False, "unbekannter Typ: " & pf.ParameterValueType)
End Select
End If
26: pfd.ApplyCurrentValues(pvs)
27: If pfd.EnableAllowEditingDefaultValue Then
28: pfd.EnableAllowEditingDefaultValue = Not pfd.HasCurrentValue
29: If pfd.EnableAllowEditingDefaultValue Then
30: pfd.CurrentValues.Add(pvs(0))
31: pfd.EnableAllowEditingDefaultValue = Not pfd.HasCurrentValue
End If
End If
32: If pf.AllowCustomValues Then
33: pf.AllowCustomValues = Not pfd.HasCurrentValue
34: If pf.AllowCustomValues Then
35: pf.CurrentValues.Add(pvs(0))
'pf.ReportParameterType
36: pf.AllowCustomValues = Not pfd.HasCurrentValue
End If
End If
End If
End If
37: If pf.AllowCustomValues Then
38: pf.AllowCustomValues = Not pf.HasCurrentValue
End If
End If
End If
39: lngIndex = -1
End If
Next
End If
End If
ParamErrorReturn:
40: lngIndex = -1
Catch ex As Exception
lngErrNr = Err.Number
strErrDesc = "At Line: " & Err.Erl & " Err.Desc: '" + Err.Description + "'"
If pf IsNot Nothing Then
strErrDesc += GetParameterName(pf) + "' Index: " & lngIndex
Else
strErrDesc += "Index: " & lngIndex
End If
If m_Report IsNot Nothing Then
strErrDesc += " Report: '" + m_Report.FileName + "'"
End If
strErrDesc += " " + itsData.GetExceptionString(ex) + " Stack: '" + System.Environment.StackTrace + "'"
...GenerateError(lngErrNr, strErrDesc, Name, "SetDefaultParameterValues", False, True, ProjectName)
If lngIndex > -1 Then
GoTo ParamErrorReturn
End If
End Try
End Sub
Tanks.