簡體   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