2011-01-11 72 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; 
相关问题