EDIT: J'ai vu votre montage, donc je vais garder mon message original mais je dois dire .. Je n'ai jamais eu de rapport de cristal en mode design en VS donc je ne peux pas être d'une grande aide désolé.
report.SetDatabaseLogon(UserID, Password, ServerName, DatabaseName);
Après cela, vous devez rouler à travers toutes les tables référencées dans le rapport et récursif par des sous-rapports et réinitialiser leur logoninfo à un système basé sur les rapports connectioninfo.
private void FixDatabase(ReportDocument report)
{
ConnectionInfo crystalConnectionInfo = someConnectionInfo;
foreach (Table table in report.Database.Tables)
{
TableLogOnInfo logOnInfo = table.LogOnInfo;
if (logOnInfo != null)
{
logOnInfo.ConnectionInfo = crystalConnectionInfo;
table.LogOnInfo.TableName = table.Name;
table.LogOnInfo.ConnectionInfo.UserID = someConnectionInfo.UserID;
table.LogOnInfo.ConnectionInfo.Password = someConnectionInfo.Password;
table.LogOnInfo.ConnectionInfo.DatabaseName = someConnectionInfo.DatabaseName;
table.LogOnInfo.ConnectionInfo.ServerName = someConnectionInfo.ServerName;
table.ApplyLogOnInfo(table.LogOnInfo);
table.Location = someConnectionInfo.DatabaseName + ".dbo." + table.Name;
}
}
//call this method recursively for each subreport
foreach (ReportObject reportObject in report.ReportDefinition.ReportObjects)
{
if (reportObject.Kind == ReportObjectKind.SubreportObject)
{
this.FixDatabase(report.OpenSubreport(((SubreportObject)reportObject).SubreportName));
}
}
}