对于所有的报表工具来说,基本上所有Grouping功能的都很相似。正如前面说到的,Group处于Page Header和Page Footer之间,同时又将Detail包括与其中。
下面还是通过一个例子来进行说明。这个例子的主要功能是显示山西和四川两省的居民平均消费水平,主要从食品,服装,医疗及旅行这四方面来进行分组并按省进行小计及最后总的合计。此外,当前这个例子主要通过class进行数据源的的绑定,其具体的操作步骤如下所示:
1. 创建新的报表解决方案,同时创建三个项目,一个为Class Library项目,一个为Report项目,另一个为控制台项目,主要用来对report进行调用并测试。三者的依赖关系为:Report项目依赖类库项目,而控制台项目则依赖类库项目和Report项目;
2. 在类库项目中添加一个类CitizenConsumption并编译该项目,内容如下:

public class CitizenConsumption { public String ProviceName { get; set; } public String ExpenseItem { get; set; } public Decimal Expense { get; set; } }
3. 在Report项目中添加对类库项目的引用,新建空的Report页面,然后进行如下的操作:
A. 在当前Report页面上添加ReportHeader,ReportFooter,GroupHeader及Group Footer;
B. 从Toolbox中的Data类别中找到BindingSource控件并拖到当前的Report页面上,可以通过点击工具栏中的XtraReports->Report Explorer找到它。右击它的属性,在它的DataSource属性中通过点击Add Project Data Source把CitizenConsumption作为它的数据源;
C. 在工具栏中,点击XtraReports->Field List,来显示我们我们可以使用的列。在任意一列上选择右键来创建CalculatedField,主要用来对消费的金额进行合计,表达式为:sum([Expense]);
D. 在当前的Report页面上新建XRLabel并绑定列到相应的XRLabel上,完成后的结果如下所示(PS.Sum([Expense])需要将Summary Running设置为Group):
E. 编译当前project。
4. 在控制台项目中添加对上述两个project的引用然后进行如下的操作:
A. 添加类DataPreparation,具体如下所示:

public class DataPreparation { public List<CitizenConsumption> GetCitizenConsumptionList() { List<CitizenConsumption> AEList = new List<CitizenConsumption>(); CitizenConsumption ce_11 = new CitizenConsumption(); ce_11.ProviceName = "ShanXi"; ce_11.ExpenseItem = "Food"; ce_11.Expense = 2000; CitizenConsumption ce_12 = new CitizenConsumption(); ce_12.ProviceName = "ShanXi"; ce_12.ExpenseItem = "Clothing"; ce_12.Expense = 1000; CitizenConsumption ce_13 = new CitizenConsumption(); ce_13.ProviceName = "ShanXi"; ce_13.ExpenseItem = "Travel"; ce_13.Expense = 1000; CitizenConsumption ce_14 = new CitizenConsumption(); ce_14.ProviceName = "ShanXi"; ce_14.ExpenseItem = "MedicalCare"; ce_14.Expense = 500; CitizenConsumption ce_21 = new CitizenConsumption(); ce_21.ProviceName = "SiChuan"; ce_21.ExpenseItem = "Food"; ce_21.Expense = 2300; CitizenConsumption ce_22 = new CitizenConsumption(); ce_22.ProviceName = "SiChuan"; ce_22.ExpenseItem = "Clothing"; ce_22.Expense = 800; CitizenConsumption ce_23 = new CitizenConsumption(); ce_23.ProviceName = "SiChuan"; ce_23.ExpenseItem = "Travel"; ce_23.Expense = 1150; CitizenConsumption ce_24 = new CitizenConsumption(); ce_24.ProviceName = "SiChuan"; ce_24.ExpenseItem = "MedicalCare"; ce_24.Expense = 490; AEList.Add(ce_11); AEList.Add(ce_12); AEList.Add(ce_13); AEList.Add(ce_14); AEList.Add(ce_21); AEList.Add(ce_22); AEList.Add(ce_23); AEList.Add(ce_24); return AEList; } }
B. 添加新的WinForms页面,添加按钮并触发其Click事件,Click的具体内容如下所示:

private void btnConfirm_Click(object sender, EventArgs e) { var dataprep = new DataPreparation(); using (var rpt = new ConsumptionExpense()) { rpt.DataSource = (dataprep.GetAverangeExpenseList()); rpt.CreateDocument(); SaveFileDialog dlg = new SaveFileDialog(); dlg.DefaultExt = "pdf"; dlg.Filter = "Pdf documents (*.pdf)|*.pdf|All files (*.*)|*.*"; string filename; if (dlg.ShowDialog() == DialogResult.OK) { filename = dlg.FileName; rpt.ExportToPdf(filename); MessageBox.Show("Exported to: " + filename); }; } }
C. 设置该项目为起始项目。
5. 点击F5运行,最终导出的PDF格式如下所示,至此,大功告成!