首页 文章

Crystal Reports以编程方式使用两个传入的参数进行排序

提问于
浏览
0

我是Crystal Reports的新手,我可能没有使用最新版本 . 我们使用VS2010 / ASP.NET作为我们的主要编程环境,但我们在VS2008中使用集成的Crystal Reports 2008设计器,因此我需要在设计报表时切换到2008 . 通过在IDE中定义参数字段然后将它们传入,我已经将参数传递给报告 . 我们的ASP.NET屏幕具有可排序的GridViews . 数据显示在Crystal Report上,但我必须匹配它的排序方式 . 我在Google上查了一下,找到了thisthis article . 我无法弄清楚如何使用这些代码片段 . 我们最好的选择似乎是我们的"Report Controller"类,这是C#中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 virtual CrystalDecisions.CrystalReports.Engine.ReportDocument CreateReport(){CRMOCContacts rpt = new CRMOCContacts(); rpt.Site = this.Site;返回rpt; }

我想出了什么 . CRMOCContactsController中的代码可以是Crystal代码,如果我将this.Report视为ReportDocument并添加这些库:使用CrystalDecisions.Shared;使用CrystalDecisions.ReportSource;使用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?什么格式?

2 回答

  • -1
    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;
    
  • 0

    山姆,我无法弄清楚你的帮助班是如何运作的 . 看起来您正在将数据集传递给ReportDocument,对吗?如果是这种情况,您可以传递给ReportDocument已排序的数据表,它将保持行的顺序 .

    在这里,我将数据集传递给我的报表,该报表是从作为参数接收订单的存储过程创建的 . 数据集已排序,因此报告也会显示已排序的信息 .

相关问题