I do both what szlamany says (build my own reports from scratch using printdocuments, and using crystal reports)

They are both good for their own reasons, and I pick which one based on the criteria of the report itself.

Crystal can both go out and grab the data from a database via a query, or you can pass in a .NET dataset for the report to use as its datasource.

Honestly crystal is very good, but it has 2 downsides.

1) it seems to be a pain to deploy for a lot of people (I personally did not have this problem, but I have heard lots of people have)

2) You can only design the report at design time, you can't view it with data until you run the app and view it in the report viewer control. If you had the full version of CR, this would not be the case. My guess is they left this ability out of the free .NET version as a selling point for the full version.