gpt4 book ai didi

c# - WPF 中现有的 Crystal Report

转载 作者:行者123 更新时间:2023-11-30 23:03:16 27 4
gpt4 key购买 nike

我试图在我们的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com