Tienes 2 Formas de Hacerlo:
a traves de parametros q maneja el CrystalReport
Ejm de como usar parametros en el Crystal Report
Código vb:
Ver originalImports CrystalDecisions.Shared
Dim Rep As New CryRepPrueba ' Instanciando el Crystal Report Creado
Dim Params As New ParameterValues ' Creando una Coleccion de Parametros
Dim Par As New ParameterDiscreteValue ' Parametro Discreto q viene en el proc. alm. y se muestra en el Crystal Report
Params.Clear() ' Limpiando la Coleccion de Datos
Par.Value = textbox1.text ' Asignando un Valor Discreto a nuestra variable jalando el valor de una caja de texto de tu formulario
Params.Add(Par) ' Agregando el param discreto a la coleccion de parametros
Rep.DataDefinition.ParameterFields("@PARAM1").ApplyCurrentValues(Params) ' Aplicando los valores de nuestra coleccion a los parametros del crystal report
Params.Clear()
Par.Value = textbox2.text
Params.Add(Par)
Rep.DataDefinition.ParameterFields("@PARAM2").ApplyCurrentValues(Params)
Crv_PruebaReportSource = Rep ' Mostrando el Reporte
Este Codigo Puede ir en el Load o primero rellenas las cajas de tu formulario presionas un boton y te mostrara el reporte
a traves de SetDataSource
en el ejemplo anterior q te mostre a traves de parametros opcionales sale correctamente el problema vendria q si pulsare el botona actualizar del crystalreportviewer me pediria de nuevo los parametros para esto usa esta forma
Código vb:
Ver originalDim Rep As New RepPrueba ' Sacando el Reporte
Dim Dt as new DataTable ' Creando el DataTable
' Aqui tu codigo para llenar el datatable es decir ejecutas el procedimiento almacenado
'enviandole los parametros a dicho procedimiento y con un adaptador rellenas el datatable
' asi todo el contenido de la consulta se rellena en el datatable y se lo pasa al reporte
' asi q cuando pongas actualizar en el crustalreportviewer ya no te pediria de nuevo los parametros
'Ojo q el procedimiento q rellena el datatable debe ser = al del reporte
Rep.setDataSource(Dt)