I think you will have to provide logon info for all the tables involved within your report source. Please see code below which might help you.
Note: The connection security information must be supplied in a different way rather than as specified below for security purpose (Passwords and server info should not be typed directly as shown in the code below - I am only using it to simplify things). Again, if you want to specify parameters to the source, you can as you are doing it.
ReportDocument report = new ReportDocument();
TableLogOnInfo logoninfo = new TableLogOnInfo();
ConnectionInfo connectioninfo = new ConnectionInfo();
Tables tables;
connectioninfo.ServerName = "<Your Database Server Name>"
connectioninfo.DatabaseName = "<Your Database Name>";
connectioninfo.UserID = "<Your Database User>";
connectioninfo.Password = "<Your Database User Password";
string ReportPath = Server.MapPath("TempReport.rpt");
report.Load(ReportPath);
tables = report.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
logoninfo = table.LogOnInfo;
logoninfo.ConnectionInfo = connectioninfo;
table.ApplyLogOnInfo(logoninfo);
}
this.crysreportviewer.ReportSource = report;
crysreportviewer.RefreshReport();