2010-05-21 69 views
0

我有一個基於參數化存儲過程的Crystal報表。該報告顯示每個參數的值以及數據。在正常使用中,一切正常。將數據推送到Crystal報表時參數值未顯示?

我現在需要添加一些額外的功能到我的報告應用程序,對存儲過程返回的數據做一些額外的處理。爲了達到這個目的,我想從我的C#代碼中調用該過程,並將數據和參數值一起推送到報告中。

作爲一個概念驗證,我正在用虛擬數據構建一個數據表並將其推送到報告中。參數值不會出現在報告中,但會顯示虛擬數據。我究竟做錯了什麼?

我使用Crystal Reports 11.5構建報表,並使用Visual Studio 2010構建應用程序。我使用的代碼是:

using System; 
using System.Data; 
using CrystalDecisions.CrystalReports.Engine; 
using CrystalDecisions.Shared; 

namespace ReportTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var fakeTable = new DataTable("report_for_date;1"); 
      fakeTable.Columns.Add("Name", typeof(string)); 
      fakeTable.Columns.Add("Amount", typeof(decimal)); 

      var row = fakeTable.NewRow(); 
      row["Name"] = "TEST"; 
      row["Amount"] = 1000; 

      fakeTable.Rows.Add(row); 

      var rep = new ReportDocument(); 

      rep.Load("reportfordate.rpt", OpenReportMethod.OpenReportByDefault); 

      rep.SetDataSource(fakeTable); 

      rep.SetParameterValue("@date", new DateTime(2010, 05, 21)); 
      rep.SetParameterValue("@threshold",5); 

      // This code prints out the expected values (set above) 
      foreach (ParameterField p in rep.ParameterFields) 
       foreach(ParameterDiscreteValue v in p.CurrentValues) 
        Console.WriteLine("{0}={1}", p.Name, v.Value); 

      // The report PDF is generated but does not display the parameter values 
      rep.ExportToDisk(ExportFormatType.PortableDocFormat,"c:/temp/hack.pdf"); 
     } 
    } 
} 

回答

0

您的概念應該工作。您應該能夠收集C#中的數據,然後將其推送到Crystal Report。

我試過你的代碼了,它似乎爲我工作。我通常做的不同的事情不是使用SetParameterValue,而是通常單獨構建ParameterField對象,然後將它們添加到ParameterFields對象,然後將該對象傳遞給報告。這是更乏味的,可能並不比這種方式更好。

回到你的問題,我會建議你確保參數名拼寫正確(帶有「@」符號),但是如果是這樣的話,它應該會給你一個錯誤。

唯一的另一件事是確保你有報告中包含的參數字段,並且他們沒有任何抑制邏輯附加到他們,但這是一種愚蠢,我懷疑這將是案件。

總而言之,它看起來像你做的是正確的,你的參數字段應該顯示出來。作爲另一個測試,您可以隨時嘗試使用水晶查看器創建一個簡單的表格應用程序,以查看其中的外觀。這可能會導致出口部分混亂,因爲出口過程中似乎有時會出現奇怪的情況。

我知道這可能不是很多幫助,但我希望你找到一些有用的東西。 :)