It is possible to bind a crystal report against a strongly typed dataset and supply the populated dataset for the report data at runtime.
Unfortunately I don't have a code sample to hand but you should be able to find examples on google.
I recently had to research this though quickly gave up in favour of binding directly against by business objects as this allows me to reuse my business logic within my reports. If you decide to go this route though beware, in order to bind the report to your business objects, you have to include the report in the same project as the business object.
HTH
Smeat