You can pass parameter values to a crystal report programmatically using ReportDocument.DataDefinition.ParameterFields member, which represents a collection of parameters associated with a report.
Before you use ParameterFields, you must import CrystalReport.Engine namespace by adding the following line to your code:
  1. Imports CrystalDecisions.CrystalReports.Engine
In my report, I have two parameters called ParameterName1 and ParameterName2 and I want to pass values as "Parameter1Value" and "Parameter2Value" respectively. If you have more than 2 parameters, just repeat the same steps between "START" and "END" commented lines. Also, read the comments in the code carefully.
  1. ' Create a report instance. This is the class added to your project
  2. ' when you added the report to the project
  3. Dim report As MyReport = New MyReport
  4. ' Fill data in DataSet here. Skip this step if your report is calling
  5. ' a stored procedure direct
  6. Dim ds As DataSet = New DataSet
  7. ' ds = GetDataFromDatabase()
  8. Dim crParameterDiscreteValue As ParameterDiscreteValue
  9. Dim crParameterFieldDefinitions As ParameterFieldDefinitions
  10. Dim crParameterFieldLocation As ParameterFieldDefinition
  11. Dim crParameterValues As ParameterValues
  12. '
  13. ' Get the report parameters collection.
  14. '
  15. crParameterFieldDefinitions = report.DataDefinition.ParameterFields
  16. ' Add a parameter value - START
  17. crParameterFieldLocation = crParameterFieldDefinitions.Item("@ParameterName1")
  18. crParameterValues = crParameterFieldLocation.CurrentValues
  19. crParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue
  20. crParameterDiscreteValue.Value = "Parameter1Value"
  21. crParameterValues.Add(crParameterDiscreteValue)
  22. crParameterFieldLocation.ApplyCurrentValues(crParameterValues)
  23. ' Add a parameter value - END
  24. crParameterFieldLocation = crParameterFieldDefinitions.Item("@ParameterName2")
  25. crParameterValues = crParameterFieldLocation.CurrentValues
  26. crParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue
  27. crParameterDiscreteValue.Value = "Parameter2Value"
  28. crParameterValues.Add(crParameterDiscreteValue)
  29. crParameterFieldLocation.ApplyCurrentValues(crParameterValues)
  30. '
  31. ' Set report's DataSource. Skip this step if your report is calling a
  32. ' stored procedure direct in the report.
  33. '
  34. report.SetDataSource(ds)
  35. '
  36. ' Set CrystalReportViewer.ReportSource
  37. '
  38. CrystalReportViewer1.ReportSource = report