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