Problema con SubInformes y dos DataTables en Crystal Reports

Problema: Tengo dos reportes, creados por separado, por ejemplo, informe1 e informe2, pero por varias necesidades tuve que poner el informe2 dentro del informe1 como un subreporte, pero, ¡HORROR!, el informe2 no me muestra ningún dato al momento de mostrarlo.
Solución: Revisar la manera en que se envían los datos a los diferentes informes.

El informe1 se llenan con parámetros de campos fórmula que envío desde mi formulario, el informe2 se llena con un DataTable que contiene la información necesaria. ¿Cuál es el error? Que el informe1 no contiene el DataTable del informe2 y por eso no se muestra la información.

Desgraciadamente, el informe1 o el informe principal debe contener TODOS los DataTables de los otros subinformes (por si tengo más de uno), porque del informe principal se envía los datos a los informes secundarios o subreportes. Solo hay que tener un poquito de cuidado al tratar con la información de los diferentes DataTables, sobre todo si los nombres son iguales.

Recomendación: Usar DataTables con nombres diferentes para cada reporte, porque si no se puede caer en inconsistencias.

De allí, el enviar la información a los diferentes reportes y subinformes es de lo más sencillo, como lo indico en el siguiente ejemplo.

Private Sub Cargar_Rep_Sub()
        'CrystalReport1 es el informe1 (el principal)
        Dim rdInforme As New CrystalReport1
        'El informe principal solo recibe campos fórmulas
        rdInforme.DataDefinition.FormulaFields("campo1").Text = Label1.Text
        rdInforme.DataDefinition.FormulaFields("campo2").Text = Text1.Text
       
        'Anteriormente, en informe1.rpt tuve que añadir el dataTable del informe2.rpt
        'Aquí se envía los datos al informe principal
        rdInforme.SetDataSource(dataTable)
       
        'Asigno el visor al reporte
        Form1.CrystalReportViewer1.ReportSource = rdInforme
End Sub

¿Pero, qué pasa si tengo dos o más dataTables? ¿Cómo envío dos dataTables a un mismo reporte?

Para ello se utiliza un dataSet tipo con los dataTables creados anteriormente, como lo explico en otra sección, la diferencia radica en la forma en que se llenan estas dataTables.

Generalmente, para llenar mis datos que obtengo de diferente lugares (por ejemplo un SP o un select), lo realizo de esta manera.

Try
        Dim dtTabla as New DataTable
        adapter.Fill(dtTabla)
Catch expSQL As SqlException
        MsgBox(expSQL.ToString, MsgBoxStyle.OkOnly, "SQL Exception")
        Exit Sub
End Try

Pero para llenar las tablas del dataSet tipo se realiza así.

Try
        'dtTabla es el nombre de la tabla que se encuentra dentro del dataSet tipo
        adapter.Fill(dataSet1, "dtTabla")
Catch expSQL As SqlException
        MsgBox(expSQL.ToString, MsgBoxStyle.OkOnly, "SQL Exception")
        Exit Sub
End Try

Luego, para enviar los datos al Crystal Report se asigna el dataSet.

Private Sub Cargar_Reporte()
        'CrystalReport1 es el informe1 (el principal)
        Dim rdInforme As New CrystalReport1
       
        'Aquí se envía los datos al informe principal
        rdInforme.SetDataSource(dataSet1)
       
        'Asigno el visor al reporte
        Form1.CrystalReportViewer1.ReportSource = rdInforme
End Sub