Hay varios puntos que mirar. (Todos desde mi punto de vista)
Primero la conexión.
Un reporte no queda "amarrado" a una conexión fija ya que estos se diseñan con un DataSetTipado, este es quien define la estructura de datos del reporte.
Segundo
Un
DataSet es un conjunto de tablas por lo tanto el reporte puede tener como origen para su diseño una o varias tablas, cuando quieres cargar el reporte en tu aplicacion solo debes pasar una instancia del
DataSet con el cual se diseño con los datos ya cargados y el reporte muestra lo que tu le entregues ya sea:
Cita: la informacion que requiera el usuario
o todos los registros de la tabla, eso se define desde la aplicación si el usuario realiza filtros o no
Tercero Codigo de Ejemplo.
Cargamos los datos en un DataSet
Código:
//Cargamos el reporte
Core.Calls calls = new MiSistema.Core.Calls();
datesDataSet1.Clear();
datesDataSet1.tblCalls.Merge(calls.GetDataReportCalls());
Creamos una instancia del reporte y le asignamos el DataSet que llenamos en la consulta anterior
Código:
rptDates report = new rptDates();
report.SetDataSource(datesDataSet1);
Asignamos el Reporte a un CrystalReportViewer
crystalReportViewer1.ReportSource = report
Entonces como puedes ver por ningún lado se le asigno una conexión, solo se le asignan los datos que debe de mostrar.
Saludos