To manually bind a DataTable to a report viewer
Remove any designer data bindings you have on the report viewer control
(make sure there's nothing in the <DataSources> element as shown below)
<LocalReport ReportPath="Report.rdlc">
<DataSources>
</DataSources>
</LocalReport>
Add a new dummy DataSet in your App_Code folder (or make use of one if you have). Place a table in the designer and add the same columns you have in your datatable you wish to use (I'll assume the name of the DataSet is DataSet1 & that of DataTable is DataTable1)
Once you have your DataSet ready, you may add a table or other object in your report designer & drag fields from the DataSet onto it.
Here's how you bind your data in DataTable (or DataSet) to the report - in a event or Page_Load
Assuming you have a loaded DataTable named dt
ReportDataSource rds = new ReportDataSource("DataSet1_DataTable1", dt);
ReportViewer1.LocalReport.DataSources.Add(rds);
ReportViewer1.DataBind();
Remember to import namespace Microsoft.Reporting.WebForms for it
I have a little demo page showing how to do it - if you need it, ask me. I'll send it.