cancel
Showing results for 
Search instead for 
Did you mean: 

Pass more than two parameters to Crystal Reports from VB.NET

Former Member
0 Kudos

Below is my code in VB.NET 2010 to pass parameters in Crystal Report.

All the way I am able to pass one parameter in report which is packing_size (I have created packing_size field in Crystal Reports Parameter Fields)

Now I want to pass a second parameter with AND or OR condition.

Can I get help?

I have come all the way at 99% I want to complete it @100%, PLEASE HELP

Code as below:

Imports System.Data.OleDb
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Public Class frmrptProducts
Private Sub frmrptProducts_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  
Dim cryRpt As New ReportDocument
  
Dim CrTables As Tables
  
Dim crtableLogoninfo As New TableLogOnInfo
  
Dim crConnectionInfo As New ConnectionInfo

  
'load report
  cryRpt
.Load(ReportPath & "CRproducts.rpt")

  
'Connection
  
With crConnectionInfo
  
.ServerName = My.Application.Info.DirectoryPath.ToString() & "\data\db.mdb"
  
'.DatabaseName = ""
  
'.UserID = ""
  
.Password = ""
  
End With

  
'Passing parameters code starts here
  
Dim crParameterFieldDefinitions As ParameterFieldDefinitions
  
Dim crParameterFieldDefinition As ParameterFieldDefinition
  
Dim crParameterValues As New ParameterValues
  
Dim crParameterDiscreteValue As New ParameterDiscreteValue

  crParameterDiscreteValue
.Value = "200"
  crParameterFieldDefinitions
= cryRpt.DataDefinition.ParameterFields
  crParameterFieldDefinition
= crParameterFieldDefinitions.Item("packing_size")'
  crParameterValues
= crParameterFieldDefinition.CurrentValues

  crParameterValues
.Clear()
  crParameterValues
.Add(crParameterDiscreteValue)
  crParameterFieldDefinition
.ApplyCurrentValues(crParameterValues)
  
'Passing parameters code ends here

  CRV
.ReportSource = cryRpt
  CRV
.Refresh()

  
'Catch ex As Exception
  
' MsgBox(ex.Message)
  
'End Try

End Sub

End Class

Accepted Solutions (1)

Accepted Solutions (1)

0 Kudos

Are you adding a NEW parameter or adding values? If adding NEW then simply repeat the same process, if adding values then use the .Modify method.

And don't call:  CRV.Refresh()

It can reload the original collection and wipe out what you just added.

Don

Former Member
0 Kudos

Hi Don

Thanks for replied,

I am passing values in parameters, Field Parameters is created in Crystal report (in .rpt file)..

Can you provide any tiny helpful example.

Thanks

0 Kudos

Something like this:

private void ReportDocumentSetParameters(CrystalDecisions.CrystalReports.Engine.ReportDocument rpt)
{
    SetCrystalParam(rpt, "@FirstParam", "StringValue");
    SetCrystalParam(rpt, "@SecondParam", "StringValue");
}

private void SetCrystalParam(CrystalDecisions.CrystalReports.Engine.ReportDocument rpt, string parameterName, string listOfValues)
{
    int ParCount = rpt.DataDefinition.ParameterFields.Count;

    foreach (CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition crParamField in rpt.DataDefinition.ParameterFields)
    {

        if ("@" + crParamField.Name.ToLower() == parameterName.ToLower())
        {
            try
            {
                CrystalDecisions.Shared.ParameterValues myparameterValues = new CrystalDecisions.Shared.ParameterValues();
                CrystalDecisions.Shared.ParameterDiscreteValue crDiscreteValue = new CrystalDecisions.Shared.ParameterDiscreteValue();

// you'll have to adjust this part
                crDiscreteValue.Value = listOfValues;
                myparameterValues.IndexOf(crParamField.Name);
                myparameterValues.Add(crDiscreteValue);
                crParamField.ApplyCurrentValues(myparameterValues);
                return;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }
    }
}

Don

Answers (0)