我是Crystal Reports的新手,我可能不会使用最新版本。我们使用VS2010 / ASP.NET作为我们的主要编程环境,但我们在VS2008中使用集成的Crystal Reports 2008设计器,因此我需要在设计报表时切换到2008。通过在IDE中定义参数字段然后将它们传入,我已经将参数传递给报告。我们的ASP.NET屏幕具有可排序的GridViews。数据显示在Crystal Report上,但我必须匹配它的排序方式。我在Google上查了一下,找到了this和this article。我无法弄清楚如何使用这些代码片段。我们最好的选择似乎是我们的“报表控制器”类,它是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"]);
}
有谁知道如何使用这些类型的类来执行此操作?一个参数将是要排序的字段,另一个参数将是方向。谢谢。在代码中显示我真的有帮助。
Tiago,我的浏览器被锁定,不允许我添加评论。唯一存在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?什么格式?
答案 0 :(得分: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;
答案 1 :(得分:-1)
Sam,我无法弄清楚你的帮助程序类是如何工作的。看起来您正在将数据集传递给ReportDocument,对吗?如果是这种情况,您可以传递给ReportDocument已排序的数据表,它将保持行的顺序。
在这里,我将数据集传递给我的报表,该报表是从作为参数接收订单的存储过程创建的。数据集已排序,因此报告也会显示已排序的信息。