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中打开报表并单击"主报表预览",我会输入一个有效的参数,它就像一个魅力,那么为什么加载应用程序时它不起作用呢?

我是不是错过了什么重要的东西?

WPF中现有的Crystal报告

好的,我有一个解决方案,在我看来这不是理想的解决方案,但它很有效。基本上,您必须用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=所需