Ok, tieni presente che non serve che i tuoi report abbiano il supporto ai dataset, l'importante è che la struttura dei dati che si aspetta sia la stessa che gli passi tu.
Infatti io che non uso mai i dataset e preferisco Domain-Model e quindi Collection<Entita> varie, mi capita per comodità di farmi i report agganciati ad un mdb (quindi access) con la stessa struttura degli oggetti, quindi stesso tipo/numero/posizione dei campi e poi passargli da codice le collection:
IEnumerable<Cliente> clienti = ClienteManager.GetAll(...);
ReportDocument report = new ReportDocument();
report.Load(@"...report.rpt", OpenReportMethod.OpenReportByTempCopy);
report.SetDataSource(clienti);
per cui penso sia la stessa cosa se da codice gli passi un datatable (che corrisponde ad una tabella) e non un dataset (se hai il dataset, prendi le varie tabelle dello stesso che corrispondono a quelle del report) e passagli poi quelli con un codice .net.
Tutto resta invariato a livello di file ".rpt" tanto quello viene solo letto dal disco, e visualizzato sul Viewer.
Non ho provato a fare la stessa cosa con report in versione 8.5,ma penso che sia la stessa cosa, tanto appena il runtime lo carica lo rende disponibile nella versione della libreria (di solito crystal è sempre retro-compatibile).
Ciao.
Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo