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 original- Imports 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 original- Dim 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)