商信互联
在本课程中,您将学习如何在集成报告系统中创建报告。该系统基于WinForms和ASP.NET的DevExpress报告库。本课将指导您创建一个报告,该报告显示联系人对象及其名称和电子邮件地址的列表。在WinForms和ASP.NET应用程序中,最终用户都可以使用该报告。
将独立于平台的Reports V2模块添加到您的项目中。为此,请在MySolution.Module项目中双击Module.cs(Module.vb)文件。这将调用模块设计器。在“工具箱”中,导航到DX。19.2:“ XAF模块”组。将ReportsModuleV2项目从该组拖到设计器的“必需的模块”部分。
将特定于WinForms的Reports V2模块添加到WinForms模块项目中。双击MySolution.Module.Win项目中的WinModule.cs(WinModule.vb)文件。这将调用模块设计器。在“工具箱”中,导航到DX。19.2:“ XAF模块”组。将ReportsWindowsFormsModuleV2项目从该组拖到设计器的“必需的模块”部分。
将特定于ASP.NET的Reports V2模块添加到ASP.NET应用程序项目中。通过双击MySolution.Module.Web项目中的WebModule.cs(WebModule.vb)文件来调用模块设计器。在“工具箱”中,导航到DX。19.2:“ XAF模块”组。将ReportsAspNetModuleV2项目从该组拖到设计器的“必需的模块”部分。
如果您将eXpress持久性对象用作ORM,请继续进行下一节(“设计时报告”)。否则,如果您使用Entity Framework Code First,请执行以下步骤。
右键单击MySolution.Module项目,然后选择“添加” |“添加”。新文件夹。将新文件夹的名称设置为“ Reports”。右键单击“报告”文件夹,然后选择“添加” |“添加”。新项目。
您可以将报告放置在任何文件夹(包括根项目文件夹)中,尽管建议您组织项目文件。
选择DevExpress v 19.2报告,将其命名为“ ContactsReport”,然后点击添加。
这将调用报告向导。选择空白,然后单击完成。
除空白之外,请勿使用其他报告类型。其他报告类型将不允许您选择特定于XAF的数据源。在“报表设计器”中选择了数据源之后,您将可以稍后继续使用“报表向导”。
单击完成后,将调用报表设计器。在“工具箱”中,导航到DX。19.2:“ XAF报表数据源”组。将CollectionDataSource项目从该组拖到“报表设计器”窗口。
在“报表资源管理器”窗口中,选择collectionDataSource1项目。在“属性”窗口中,将“ MySolution.Module.BusinessObjects.Contact”值分配给ObjectTypeName属性。请注意“字段列表”窗口中的更改-如果您展开collectionDataSource1节点,Contact类的字段现在可用。
单击报表设计器的智能标记,然后在调用的菜单中选择“报表向导中的设计... ”。
这将调用报告向导。在第一步中,您应该选择表格报告,然后单击下一步。由于已经指定了数据源,因此您将跳过一些向导屏幕,第二步将允许您选择报告数据。
选择要在报告中使用的字段。检查左侧的collectionDataSource1数据成员,以及右侧的以下数据字段:
完成后 单击“下一步”。
选择用于对报告行进行分组的字段。由于在此示例中不需要分组,因此请单击“下一步”继续。
在下一步中,您可以自定义报告页面。保持这些设置不变,然后单击“下一步”。
选择一种报告配色方案,例如Azure,然后单击Next。
在最后一步,您可以设置报告的标题。此文本将显示在报告的顶部。将标题设置为“联系人”,然后单击“完成”。
您创建的报告结构将显示在“报告设计器”中。自定义并保存报告。
在设计时,“报表设计器”的“预览”选项卡为空。的CollectionDataSource和ViewDataSource组件不连接到数据库直接并且需要IObjectSpace实例(也可以在运行时被创建只)来装载数据。因此,它无法在设计时加载数据。
现在,使用PredefinedReportsUpdater类在XAF应用程序中注册报告。为此,在“解决方案资源管理器”中,右键单击MySolution.Module。Module.cs(Module.vb)文件,然后选择查看代码以编辑其源代码。下面的代码段演示了所需的更改。
using DevExpress.ExpressApp.ReportsV2;
using MySolution.Module.Reports;
using MySolution.Module.BusinessObjects;
//...
namespace MySolution.Module {
public sealed partial class MySolutionModule : ModuleBase {
//...
public override IEnumerable<ModuleUpdater> GetModuleUpdaters(
IObjectSpace objectSpace, Version versionFromDB) {
ModuleUpdater updater = new DatabaseUpdate.Updater(objectSpace, versionFromDB);
PredefinedReportsUpdater predefinedReportsUpdater =
new PredefinedReportsUpdater(Application, objectSpace, versionFromDB);
predefinedReportsUpdater.AddPredefinedReport<ContactsReport>(
"Contacts Report", typeof(Contact));
return new ModuleUpdater[] { updater, predefinedReportsUpdater };
}
//...
}
}
Imports DevExpress.ExpressApp.ReportsV2
'...
Public NotInheritable Partial Class MySolutionModule
Inherits ModuleBase
'...
Public Overrides Function GetModuleUpdaters( _
ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) _
As IEnumerable(Of ModuleUpdater)
Dim updater As ModuleUpdater = New DatabaseUpdate.Updater(objectSpace, versionFromDB)
Dim predefinedReportsUpdater As New PredefinedReportsUpdater( _
Application, objectSpace, versionFromDB)
predefinedReportsUpdater.AddPredefinedReport(Of ContactsReport)( _
"Contacts Report", GetType(Contact))
Return New ModuleUpdater() { updater, predefinedReportsUpdater }
End Function
'...
End Class
运行WinForms或ASP.NET应用程序,导航到“报告”并打开“联系人报告”。
下一课: 在运行时创建报告