繁体   English   中英

Crystal Reports(C#):信息显示不正确

[英]Crystal Reports (C#) : Informations not displaying correctly

我将在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,以仅在这些日期之间显示信息。 然后,我创建了两个参数: 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

此查询可正常运行,并显示每个尺寸名称的总销售数量和总价格。 在报告的页脚中,我使用的是Summary字段,其中我得到了所有totalQty总和,命名为sumTotalQty 我为totalPrice命名为sumTotalPrice另一个字段用于相同的目的。

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

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

字段sumTotalQty显示9sumTotalPrice显示$34.00 ,这是精确的结果。 我必须确切地说,第一行2013-10-29orders.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子句),如何在给定日期范围的摘要字段中获得正确的结果? 它就像它从数据库而不是报告字段中求和。

编辑经过多次搜索,我脑子里还有另外两个问题:

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

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

谢谢你的帮助。

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

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

http://www.dotnetperls.com/sqlparameter

为什么我们总是喜欢在SQL语句中使用参数?

做一些更多的研究,你会在网上找到很多信息。 我建议将一些输入框(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM