gpt4 book ai didi

c# - Crystal 报表 (C#) : Informations not displaying correctly

转载 作者:可可西里 更新时间:2023-11-01 07:45:01 25 4
gpt4 key购买 nike

为了尽可能清楚,我将这篇文章分为 3 个部分。第一个是您需要了解的信息。第二个将是我迄今为止尝试过的解决方案。第三部分将是问题。我还必须准确地说,这是我第一次使用 CrystalReports。

信息

我目前正在使用带有 C# 的 Visual Studio 2010,并且我正在使用 SAP Crystal 报表。我正在使用 MySQL 数据库显示数据。

现在,这是我用来显示报告的表格:

Table : orders
Fields : id(primaryKey), date(DATE), quantity(INT), fksizes(INT), fkclients(INT)

Table : sizes
Fields : id(primaryKey), name(VARCHAR(30)), price(FLOAT)

Relationship between these 2 tables : orders.fksizes with sizes.id

基本上,我将日期范围作为参数传递给 Crystal Reports,以仅显示这些日期之间的信息。然后,我创建了 2 个参数:StartDateEndDate 都是 Date 类型。

我尝试过的

这是我在没有日期范围条件的情况下用来显示我想要的内容的原始查询:

SELECT sizes.name, SUM(orders.quantity) AS totalQty,
(SUM(sizes.price) * orders.quantity) AS totalPrice,
orders.date
FROM orders
INNER JOIN sizes ON orders.fksizes = sizes.id
GROUP BY sizes.name, orders.date

此查询工作正常,并显示每个尺码名称的总售出数量和总价。在报告的页脚,我使用了一个摘要字段,在该字段中我得到了所有名为 sumTotalQtytotalQty 的总和。我有另一个用于 totalPrice 的字段,名为 sumTotalPrice

我有 2 行数据测试,它们是:

Size name                     Quantity sold                      Total Price
------------------------------------------------------------------------------
Big 2 $6.00
XBig 7 $28.00

sumTotalQty 字段显示 9sumTotalPrice 字段显示 $34.00,这是精确结果。我必须准确地说,第一行有 2013-10-29 作为 orders.date 的值,第二行有 2013-10-30 .

现在,我想选择要显示结果的日期范围。例如,我选择从 2013-10-30 到今天,我应该只得到第二行 sumTotalQty 显示 7sumTotalPrice 显示 $28.00。我正确显示了单行,但 sumTotalQty 显示 9sumTotalPrice 显示 $34.00,它们在日期后不正确范围。

然后我尝试在我的 sql 查询中添加一个 WHERE 子句来指定这样的日期范围(在数据库 --> 数据库专家...):

SELECT sizes.name, SUM(orders.quantity) AS totalQty,
(SUM(sizes.price) * orders.quantity) AS totalPrice, orders.date
FROM orders
INNER JOIN sizes ON orders.fksizes = sizes.id
WHERE orders.date BETWEEN '{?StartDate}' AND '{?EndDate}'
GROUP BY sizes.name, orders.date

我没有显示任何结果。所以,我认为 {?StartDate}{?EndDate} 只是没有设置,但我真的不确定。 WHERE orders.date BETWEEN @StartDate AND @EndDate 也是如此。

问题

  1. 为什么当系统提示我输入日期范围时,{?StartDate}{?EndDate} 仍未设置?<
  2. 使用原始查询(没有 WHERE 子句),如何在给定日期范围内的汇总字段中获得正确的结果?它就像是从数据库而不是从报告字段中求和。

编辑经过多次搜索,我想到了另外 2 个问题:

  1. 是否可以在报告中添加 DateTimePicker 以便用户能够轻松输入开始日期和结束日期?之后报告会自动刷新。

  2. 有没有办法创建或使用 Crystal Reports 事件(OnLoadAfterLoad、...)?

感谢您为我提供的所有帮助。

最佳答案

问题 1:您可以使用 BETWEEN (? AND ?)BETWEEN (@StartDate AND @EndDate)问题 2:您必须对数据进行分组,然后在报告中使用总计。

编辑:在发现问题出在参数声明之后,我建议看一下以下一些帖子:

http://www.dotnetperls.com/sqlparameter

Why do we always prefer using parameters in SQL statements?

做更多的研究,您会在网上找到很多信息。我的建议是向您的页面添加一些输入框(TextBox、DateTimePicker 等),用户可以在其中输入参数值,然后以编程方式将它们传递给报表。这样您就可以将参数传递给 SQL 语句并为您的报告获取正确的数据。您的报告中也不需要参数。就 CR 事件而言,有 Init 事件,它是公开的

http://msdn.microsoft.com/en-us/library/aa691447(v=vs.71).aspx

然后有一些可能有用的查看器事件

http://msdn.microsoft.com/en-us/library/ms227097(v=vs.80).aspx

关于c# - Crystal 报表 (C#) : Informations not displaying correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19912834/

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