2011-01-11 75 views
0

我是Crystal Reports的新手,我可能沒有使用最新版本。我們使用VS2010/ASP.NET作爲我們的主要編程環境,但是我們在VS2008中使用集成的Crystal Reports 2008設計器,所以在設計報表時我需要切換到2008年。通過在IDE中定義參數字段並將它們傳遞給我,我一直在參數中傳遞參數。我們擁有可用於排序的GridView的ASP.NET屏幕。數據顯示在Crystal Report上,但我必須匹配它的排序方式。我在Google上查找了一些東西,發現thisthis article。我無法弄清楚如何使用這些代碼片段。我們最好的選擇似乎是我們的「Report Controller」類,它是C#中Crystal Reports對象可用的唯一地方。一類如下所示:Crystal Reports以編程方式使用兩個傳入的參數進行排序

public class CRMOCContactsController : ReportingBase 
    { 
     public CRMOCContactsController(DataSet reportData, NameValueCollection reportParams) 
     { 
      // Create an instance of the Crystal Report. 
      this.Report = new Reports.CRMOCContacts(); 

      // Get the data 
      this.ReportData = reportData; 

      foreach (string s in reportParams.AllKeys) 
      { 
       CRHelper.SetCurrentValuesForParameterField(this.Report.ParameterFields, s, reportParams[s]); 
      } 
     } 

     protected override void SetDataSource() 
     { 
      this.Report.Database.Tables["ContactRecord"].SetDataSource(this.ReportData.Tables["ContactRecord"]); 
      this.Report.Database.Tables["ContactSearchCriteria"].SetDataSource(this.ReportData.Tables["ContactSearchCriteria"]); 
      this.Report.Database.Tables["SSIFields"].SetDataSource(this.ReportData.Tables["SSIFields"]); 
     } 

有誰看到我如何使用這些類型的類來做到這一點?一個參數將是排序的字段,另一個參數是方向。謝謝。在代碼中顯示我真的有幫助。

蒂亞戈,我的瀏覽器已經鎖定,不允許我添加評論。唯一有Crystal代碼的地方是自動生成的C#類,與每個報告一起使用。例如,上面引用的Reports.CRMOCContacts()類。這是由工具自動生成的,無法修改: // ---------------------------------- -------------------------------------------- // //此代碼是由工具生成的。 //運行時版本:2.0.50727.3603 // //對此文件的更改可能會導致不正確的行爲,如果 //代碼被重新生成,將會丟失。 // // -------------------------------------------- ----------------------------------

有我參考的ReportDocument的唯一參考: public虛擬CrystalDecisions.CrystalReports.Engine.ReportDocument CreateReport(){0} 0 0 0 0 0 CRMOCContacts rpt = new CRMOCContacts(); rpt.Site = this.Site; return rpt; }

我想出了一些東西。如果我這樣做,CRMOCContactsController中的代碼可以是Crystal代碼。報告爲ReportDocument並添加這些庫: using CrystalDecisions.Shared; using CrystalDecisions.ReportSource; using CrystalDecisions.CrystalReports.Engine;我可以這樣做: FieldDefinition FieldDef = null ;; FieldDef = this.Report.Database.Tables [0] .Fields []; this.Report.DataDefinition.SortFields [0] .Field = FieldDef; this.Report.DataDefinition.SortFields [0] .SortDirection = CrystalDecisions.Shared.SortDirection.AscendingOrder;

我只是不知道如何在sortField中傳遞?什麼格式?

回答

-1

山姆,我找不出你的助手類是如何工作的。看起來你正在將一個數據集傳遞給ReportDocument,對嗎?如果是這種情況,可以傳遞給ReportDocument排序的數據表,並且它將保持行的順序。

在這裏,我將一個數據集傳遞給我的報表,從一個存儲過程創建,該存儲過程通過作爲參數接收訂單。數據集將進行排序,因此報告也會顯示信息已排序。

+0

它不適合我。該報告確實知道顯示排序的數據集。 – 2011-01-13 01:18:36

0
ReportDocument objReport = new ReportDocument(); 
objReport.Load("Your report path"); 
FieldDefinition FieldDef; 
FieldDef = objReport .Database.Tables[0].Fields[sortField]; 
objReport.DataDefinition.SortFields[0].Field = FieldDef; 
objReport.DataDefinition.SortFields[0].SortDirection = CrystalDecisions.Shared.SortDirection.DescendingOrder; 
相關問題