c# - WPF 中现有的 Crystal Report

标签 c# mysql wpf crystal-reports

我试图在我们的 WPF 应用程序中包括一个预先创建的 CrystalReport,它通过系统数据源(由我们的设计者创建)链接到 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 中打开报表并单击“主报表预览”,我输入了一个有效参数,它就像一个魅力,那么为什么它在加载应用程序时不起作用?

我是不是漏掉了什么重要的东西?

最佳答案

好的,我有一个解决方案,这不是我心目中的理想解决方案,但它确实有效。基本上你必须用 visual studio 中的数据表替换报表的数据源,然后手动填充该数据表。

您创建一个数据集,并在其中创建一个数据表。然后向该数据表添加列,表示为报告返回的数据(例如,从 select 语句返回的列)

然后你使用类似下面的代码。请记住,这是使用 mysql,但对于 sql server,该过程不会有太大变化。

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);

希望这对一路上的其他人有所帮助,我会继续研究最初的问题发生的原因。

关于c# - WPF 中现有的 Crystal Report,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22983670/

相关文章:

c# - NUnit 使 tcp 连接保持事件状态

mysql - 在 Apache Spark 2.0.0 中,是否可以从外部数据库获取查询(而不是获取整个表)?

php - 关于一个sql查询

c# - 如何检查我是否正在删除(退格键、删除或 'Cut' )RichTextBox 中的 UIElement?

wpf - 为什么我不能在应用样式后更改文本框背景?

c# - 如果用户在控件加载到 wpf c# 中的 GridSplitter 内的列/行内之前更改它,如何更改 gridsplitter 的位置

c# - MonoTouch 4.2 在设备上运行时不支持 System.ServiceModel.EndpointAddress()(在模拟器上运行)

c# - 将 SCORM eLearning 集成到 .NET 应用程序中 - 我应该从哪里开始?

c# - 企业应用本地化

php - 以 JSON 格式返回 MySQL 数据