簡體   English   中英

Crystal Report以Dataset作為數據源時顯示數據庫登錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM