The .NET Framework 2.0 contains a component called ReportViewer which can be used to generate reports in different formats (HTML, PDF, etc…).
After having used it for a couple of reports in a web application, I came to believe that the only good thing about it is that it’s free (when used in Local mode).
Why? Because of its bug ridden designer!
First of all, it contains a nice “Data Sources” panel that should list all the functions (from your code) that can be used to feed the report. Wonderful. Too bad that unless you keep the Default.aspx page open it doesn’t display anything.
Also, you should place the .rdlc file in your App_Code folder to get the “Data Sources” list to work. Too bad that when you publish your web site, the content of that directory will be ignored.
There are other bugs here and there, but come on… how can these two have not been noticed by Microsoft?
It feels like the bugs and limitations related to Reporting Services are un-ending. Some of the issues I’ve encountered:
> Deleting more than one column at a time in a table in report designer causes a lock up.
> Sometimes it’s impossible to close report designer because a “modal dialog” is apparently open, when in this error state only half the buttons work, there is no dialog open.
> The WinForms ReportViewer will, on occasion, show an incorrect page count. There’s a hot-fix for this, but you actually have to contact MS support and *ask* for it. Huh?
> You can’t place field data in page headers or footers, ok, I can sort of understand this one, but to really add insult you can’t even put a table control in a header or footer. I just want it for the sake of better formatting my text!
> You can’t customise the WinForms ReportViewer toolbar, other than removing existing entries. To avoid this you have to create your own toolbar and access the control programmatically. On the surface this seems reasonable. But try to establish if your report is in “Print Layout” mode, and furthermore, try to determine how many pages print layout mode is using. Can’t be done.