为了尽可能清楚,我将把这篇文章分成 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 个参数:
StartDate
和 EndDate
都是 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
此查询正常工作并显示每个尺寸名称的总销售量和总价。在报告的页脚,我使用了一个摘要字段,在该字段中我得到了所有名为
totalQty
的 sumTotalQty
的总和。对于名为 totalPrice
的 sumTotalPrice
,我有另一个用于相同目的的字段。我有 2 行数据测试,它们是:
Size name Quantity sold Total Price
------------------------------------------------------------------------------
Big 2 $6.00
XBig 7 $28.00
字段
sumTotalQty
显示 9
和 sumTotalPrice
显示 $34.00
这是确切的结果。我必须确定第一行有 2013-10-29
作为 orders.date
的值,第二行有 2013-10-30
。现在,我想选择要显示结果的日期范围。例如,我从
2013-10-30
选择到今天,我应该只得到第二行,其中 sumTotalQty
显示 7
和 sumTotalPrice
显示 $28.00
。我正确显示了单行,但显示 sumTotalQty
的 9
和显示 sumTotalPrice
的 $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
也是如此。问题
{?StartDate}
和 {?EndDate}
? 编辑
经过多次搜索,我的脑海中出现了另外两个问题:
DateTimePicker
以便用户能够轻松输入开始日期和结束日期?之后报告将自动刷新。 OnLoad
、 AfterLoad
、...)? 感谢您为我提供的所有帮助。
最佳答案
问题 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/