WPF中现有的Crystal报告
本文关键字:Crystal 报告 WPF | 更新日期: 2023-09-27 17:57:52
我试图在我们的WPF应用程序中包含一个预先创建的CrystalReport,它通过系统DataSource(由我们的设计师创建)链接到mysql数据库。然而,我遇到了一个障碍,每当报告加载到我们的应用程序中时,它都会要求数据库登录,即使使用有效信息也无法登录。
我有以下代码:
string path = System.IO.Path.Combine(Environment.CurrentDirectory, @"FrontPageReport.rpt");
ReportDocument cryRpt = new ReportDocument();
cryRpt.Load(path);
ParameterFieldDefinitions crParameterFieldDefinitions;
ParameterFieldDefinition crParameterFieldDefinition;
ParameterValues crParameterValues = new ParameterValues();
ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();
//System.Net.NetworkCredential networkCredentials = new System.Net.NetworkCredential("ShippingClient", "1234", "domain");
cryRpt.SetDatabaseLogon("ShippingClient", "1234");
crParameterDiscreteValue.Value = shipmentID;
crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
crParameterFieldDefinition = crParameterFieldDefinitions["shipment_id"];
crParameterValues = crParameterFieldDefinition.CurrentValues;
crParameterValues.Clear();
crParameterValues.Add(crParameterDiscreteValue);
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);
FrontPageReport.ViewerCore.ReportSource = cryRpt;
我已经创建了一个数据源,它使用ODBC datasource Administrator工具来镜像CrystalReport的数据源。然而,我仍然会收到总是失败的登录弹出窗口。
有人能帮忙吗?
编辑:
事实证明,这与子报表无关,实际上,它似乎完全是随机的,哪些报表有效,哪些报表无效,都使用了相同的数据库、相同的表、相同的数据源、相同的登录名。
如果我在Visual Studio中打开报表并单击"主报表预览",我会输入一个有效的参数,它就像一个魅力,那么为什么加载应用程序时它不起作用呢?
我是不是错过了什么重要的东西?
好的,我有一个解决方案,在我看来这不是理想的解决方案,但它很有效。基本上,您必须用visualstudio中的数据表替换报表的数据源,然后手动填充该数据表。
您创建了一个数据集,其中包含一个数据表。然后将表示为报表返回的数据的列添加到数据表中(例如,从select语句返回的列)
然后使用类似以下代码的东西。请记住,这是使用mysql,但sql服务器的过程不会有太大变化。
ReportDocument cryRpt = new ReportDocument();
MySqlConnection cn = new MySqlConnection("Server=IPADDRESS;Uid=USERNAME;Pwd=PASSWORD;Database=DATABASENAME;");
//This is where you run the sql to select, as you can see, we're using a procedure
MySqlDataAdapter da = new MySqlDataAdapter("CALL letter_head_address()", cn);
DataSet ds = new DataSet();
//This is where you fill the data table, the second parameter is the name of the data table you previously created.
da.Fill(ds, "my_dt");
cryRpt.Load(path);
cryRpt.DataSourceConnections.Clear();
cryRpt.SetDataSource(ds);
希望这能帮助其他人,我会继续研究最初的问题发生的原因。
通过将app.config文件从以下位置更改来修复我的问题:
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
至:
<startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0"/></startup>
如从帖子中获得的:https://social.msdn.microsoft.com/Forums/vstudio/en-US/fc4640ed-72ac-4e02-be68-6fe9760c50f8/could-not-load-file-or-assembly-filecprogram-files-x86sap-businessobjectscrystal-reports?forum=csharpgeneral&prof=所需