Hi Eric,
I should have built this example sooner; but better late than never. I did an example with Crystal Reports, which I use often and like.
In this example, I created a customer list ordered and grouped by Country, then built the report with the first 100 customers. In my example, the only form, Form1, is entirely occupied by a CrystalReportViewer. Here's the code:
customersBO1 .fillTop100();
rptCustomers rpt = new rptCustomers();
rpt.SetDataSource(customersBO1.CurrentDataTable);
TextObject t = rpt.ReportDefinition.ReportObjects["Title"] as TextObject;
t.Text = "Customer Listing";
crystalReportViewer1.ReportSource = rpt;
Crystal has some peculiarities (like having to create an instance of a TextObject that points into the report, then assigning a text string to thë isntance. I wish they permitted a syntax like rpt.Title = "Customer Listing", or even rpt.ReportDefinition.ReportObjects["Title"] = "Customer Listing"; but unfortunately, that's not how it works.
However, SF works equally well with SSRS. Let me know if you'd like a sample done with SSRS, or help on some specific issue.
Les