Depending on how you display the list of reports, you can use Activator.CreateInstance to create an instance of the report. Cast that to the ReportDocument base class and call SetDataSource with your ADO.NET DataSet. For instance, if you use a ListBox you could set the display name to whatever you want, but set the value for each item to the corresponding .rpt name. Since this gets compiled to a class with the same name using a namespace that is your project's root namespace (the project name by default) plus any folders it's in, you could do something like this:
string reportName = "MyWebApp.Reports." + listBox1.SelectedValue;
ReportDocument report = Activator.CreateInstance(reportName, "MyWebApp.dll");
report.SetDataSource(dataSet1);
Of course, you should add error handling like try-catch blocks and conditionals (like checking for null values, etc., since throwing exceptions is expensive).
Microsoft MVP, Visual C# My Articles