Hola amigos y amigas
Hoy les traigo un código muy útil cuando trabajen con crystal.
Primero que todo CR trae una caracteristica llamada SubReportes, simplemente es que en un reporte principal ustedes pueden insertar lo que se llaman subreportes, que no son más que reportes comunes y normales.
El siguiente código les muestra como manipular un subreporte que se encuentra dentro de un reporte principal.
Recuerden que es código mio y pues si lo usan deben ajustar los valores a sus proyectos.
SubreportObject sbrObjetoContadorCierre = null;
ReportDocument rdOficinasCierre = new ReporteCierreOficinas();
string strSubReporteNombre = "";
ReportDocument rdContadoresCierre = new ReportDocument();
//Obtener el ReportObject por nombre como un SubreportObject para Contadores de Cierre
sbrObjetoContadorCierre =
rdOficinasCierre.ReportDefinition.ReportObjects[5] as SubreportObject;
//Obtiene el nombre del subreporte
strSubReporteNombre = sbrObjetoContadorCierre.SubreportName;
//Abre el subreporte como un ReportDocument.
rdContadoresCierre = rdOficinasCierre.OpenSubreport(strSubReporteNombre);
//Fija la fuente de datos del subreporte de Oficinas Pendientes
rdContadoresCierre.SetDataSource(dtReporteContadoresCierre);
return(rdOficinasCierre);
Arriba entonces defino los objetos que necesito, y la aprte de abajo va má o menos así:
En sbrObjetoContadorCierre por casteo normal y corriente se obtiene de la colección
ReportObjects el objeto tipo SubreportObject que está incrustado en el reporte principal que está identificado por rdOficinasCierre.
Luego strSubReporteNombre almacena el nombre del subreporte, nombre que ustedes pueden manipular a través de la ventana de propiedades del subreporte en la propiedad SubreportName.
Luego fijense que con el nombre almacenado en strSubReporteNombre se obtiene el objeto SubReporte que al final es un ReportDocument como les dije anteriormente, es un reporte comun y corriente.
Luego para rdContadoresCierre se fija la fuente de datos que puede ser DataTable, DatSet, en fin una fuente de datos, pero finalmente se retorna el rdOficinasCierre que es el reporte principal que contiene al subreporte.
recuerden que pueden tener varios subreportes dentro del principal, obviamente hasta que el diseño y su necesidad lo permita.
Un abrazo
Att. Andres Ortiz