Kevin, for what it's worth, when I used to work in Crystal, I'd do this (where oReport was the name of the report object, and DsReportData was the dataset containing the data I wanted to push into the report object at runtime)
foreach (Table oTable in oReport.Database.Tables)
oTable.SetDataSource (DsReportData.Tables[oTable.Name.ToString()]);