0
我知道這有一個問題,因爲我發現很多關於此的線程,但沒有任何工作適合我,我越來越瘋狂!Crystal Reports在運行時更改登錄信息不起作用C#
當我生成我的報告時,我必須更改登錄信息。 但ApplyLogOnInfo方法總是帶回有害的數據。 我嘗試連接到ODBC MySQL數據庫。
這裏是我的代碼:
ReportDocument myReport = new ReportDocument();
myReport.Load("myReportPath");
ParameterField myParamFieldId = myReport.ParameterFields["param1"];
ParameterDiscreteValue param = new ParameterDiscreteValue();
param.Value = "param1";
myParamFieldId.CurrentValues.Add(param);
ParameterField myParamFieldNumRevision = myReport.ParameterFields["param2"];
ParameterDiscreteValue paramNumRevision = new ParameterDiscreteValue();
param.Value = "param2";
myParamFieldNumRevision.CurrentValues.Add(param);
ApplyLogOnInfo(myReport);
try
{
myReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "Rapport");
myReport.Close();
}
catch (Exception ex)
{
throw ex;
}
finally
{
myReport.Dispose();
}
private void ApplyLogOnInfo(ReportDocument rpt)
{
ConnectionInfo connInfo = new ConnectionInfo();
connInfo.ServerName = "test";
connInfo.DatabaseName = "test";
connInfo.UserID = "test";
connInfo.Password = "test";
connInfo.Type = ConnectionInfoType.CRQE;
connInfo.IntegratedSecurity = false;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in rpt.Database.Tables)
{
TableLogOnInfo logonInfo = table.LogOnInfo;
logonInfo.ConnectionInfo = connInfo;
table.ApplyLogOnInfo(logonInfo); // Here, old values are brought back
}
// Idem on Sub-reports
foreach (ReportDocument sousRpt in rpt.Subreports)
{
ReportDocument rptSub = rpt.OpenSubreport(sousRpt.Name);
foreach (CrystalDecisions.CrystalReports.Engine.Table table in rptSub.Database.Tables)
{
TableLogOnInfo logonInfo = table.LogOnInfo;
logonInfo.ConnectionInfo = connInfo;
table.ApplyLogOnInfo(logonInfo);
}
}
}
我看到了,這可能是由於子報表和參數。沒有辦法讓這個工作。
我也試過:
rpt.DataSourceConnections[0].SetConnection("test", "test", "test", "test");
// But DataSourceConnections[0].Attributes and DataSourceConnections[0].LogonProperties still store values from the old connection, and doesn't work. I tried to clear it does'nt apply.
// I tried to pass parameters like this
myReport.SetParameterValue("param1", "test");
myReport.SetParameterValue("param1", "test");
// I tried with dataset and fill method
現在好了,我卡住了,真的需要你的幫助!謝謝