[英]Crystal report shows database login when taking Dataset as datasource
在我的項目中,我使用EF4,但是EF上下文的連接字符串是動態生成的,並且未保存在任何配置文件中,一切正常...
當我想用水晶報表來查看我的報告,我用導入數據形成我的實體(LINQ),而且比設定數據集作為數據源的數據集報道這里是一個教程
但是在顯示的那一刻(在CrystalReportViewer中)會彈出一個登錄提示窗口,詢問登錄名和密碼(服務器名稱和數據庫名稱,但字段已禁用)
我在Google上搜索了一下,發現大多數建議的解決方案都集中在:在代碼中設置憑據(像這樣):
ConnectionInfo crconnectioninfo = new ConnectionInfo();
crconnectioninfo.ServerName = "localhost";
crconnectioninfo.DatabaseName = "dbclients";
crconnectioninfo.UserID = "ssssssss";
crconnectioninfo.Password = "xxxxxxx";
但是這是我創建報告的方式:
for (i = 0; i < 7; i++)
{
DataRow dr = container.NewRow();
dr = CreateRowFromMirrorRow(dr, i); //Methode that creates a Row
container.Rows.Add(dr);
}
objRpt.SetDataSource(container.DefaultView);
// Binding the crystalReportViewer with our report object.
crystalReportViewer1.ReportSource = objRpt;
crystalReportViewer1.Refresh();
crystalReportViewer1.Visible = true;
我的問題是:
為什么在CrReport或數據集與數據庫之間沒有直接連接,為什么我必須傳遞任何數據庫憑據?
如何使用ConnectionInfo對象(在我的情況下)設置數據集(或水晶報表)的憑據?
以我的經驗,當您讓Crystal Reports在不應該提供的條件下要求提供憑據時,表面上似乎出現了不相關的錯誤。
我認為,如果您不在查看器上調用“ Refresh
”,而是在報表本身上調用“刷新”,則也許可以使其工作:
objRpt.SetDataSource(container.DefaultView);
objRpt.Refresh();
crystalReportViewer1.ReportSource = objRpt;
// Don't refresh viewer!
// If you have any report parameters, set them through the viewer here.
如果出於某種原因,如果以后確實需要設置Crystal Report的連接,則可以在設置報表查看器的ReportSource
之前在報表上使用此連接:
foreach (Table crTable in report.Database.Tables)
{
TableLogOnInfo tableLogOnInfo = crTable.LogOnInfo;
var connectionInfo = tableLogOnInfo.ConnectionInfo;
// use connectionInfo to set database credentials
crTable.ApplyLogOnInfo(tableLogOnInfo);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.