我是Crystal Reports的新手,我可能没有使用最新版本 . 我们使用VS2010 / ASP.NET作为我们的主要编程环境,但我们在VS2008中使用集成的Crystal Reports 2008设计器,因此我需要在设计报表时切换到2008 . 通过在IDE中定义参数字段然后将它们传入,我已经将参数传递给报告 . 我们的ASP.NET屏幕具有可排序的GridViews . 数据显示在Crystal Report上,但我必须匹配它的排序方式 . 我在Google上查了一下,找到了this和this 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 回答
山姆,我无法弄清楚你的帮助班是如何运作的 . 看起来您正在将数据集传递给ReportDocument,对吗?如果是这种情况,您可以传递给ReportDocument已排序的数据表,它将保持行的顺序 .
在这里,我将数据集传递给我的报表,该报表是从作为参数接收订单的存储过程创建的 . 数据集已排序,因此报告也会显示已排序的信息 .