网格控件提供了用于获取 总体 和 分组 汇总值的多种方法。 本主题描述如何使用这些方法来访问汇总值。 关于汇总的基础信息,在 汇总概述 主题中提供。
获取总体汇总值
如同在 总体汇总 主题中描述的那样,为视图内的所有记录计算总体汇总值,并且显示在视图的脚注中、特定列下面。 列的 GridColumn.SummaryItem 属性存储了指定总体汇总的 GridSummaryItem 类对象。 可以通过 GridSummaryItem.SummaryValue 属性获取汇总值。 GridColumn.SummaryText 属性获取汇总值的字符串表示形式。 显示在 脚注单元格 中的汇总文本可以通过 GridSummaryItem.GetDisplayText 方法获取。
获取分组汇总值
分组汇总是由 GridView.GroupSummary 属性指定的,此属性表示汇总项的集合。 每个项都可以被显示在它的分组行中或分组脚注中的特定列。
下列方法可以用于获取显示在 分组行 和 分组脚注 中的分组汇总:
-
GridView.GetGroupSummaryValues
每个组的多个汇总都可以被计算。 此方法返回包含特定数据组的所有被计算汇总取值的哈希表。 此哈希表的键取值是汇总项 (GridGroupSummaryItem 对象)。 取值是汇总值。 因此,可以使用索引符号来访问特定的汇总项取值。 所需的汇总项应作为索引参数指定。 所需的数据组由分组行的句柄标识。
-
GridView.GetGroupSummaryValue
此方法返回由汇总项标识的特定分组汇总的取值。
-
GridView.GetRowSummaryItem
此方法只能用于获取显示在分组脚注中的汇总值。 它返回表示汇总项及其值的字典条目。 字典条目的键是表示汇总项的 GridGroupSummaryItem 对象。 取值是一个对象,此对象含有被计算的汇总值。
-
GridView.GetGroupSummaryText
获取显示在分组行中的汇总文本。
-
GridView.GetGroupSummaryDisplayText
获取特定分组汇总值的文本表示形式。
-
GridView.GetRowFooterCellText 方法
返回显示在特定分组行脚注单元格中的汇总文本。
可能需要获取显示在分组行中的完整文本。 要达到此目的,则调用 GridView.GetGroupRowDisplayText 方法。
示例
下面的示例展示了如何通过接管 ColumnView.FocusedRowChanged 事件,获取有焦点的行的分组汇总值。 汇总项被显示在分组行中和分组脚注中。 如果获得焦点的行不是分组行,则使用 GridView.GetParentRowHandle 方法来获取获得焦点的行的上级分组行。
为了显示分组汇总,必须把分组汇总项添加到 GridView.GroupSummary 集合中。 要在设计时刻这样操作,则打开 “Group Summary Items(分组汇总项)”页面,添加汇总项并定制它们,如下图所示:
可以以相同的方式定制第二个汇总项。 请参阅 汇总概述 主题获得关于定制汇总项的细节。
要在运行时刻添加和定制分组汇总项,可以使用下列代码:
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid; //... GridView View = gridView1; // Create and setup the first summary item. GridGroupSummaryItem item = new GridGroupSummaryItem(); item.FieldName = "ProductID"; item.SummaryType = DevExpress.Data.SummaryItemType.Count; item.DisplayFormat = "Count = {0}"; item.Tag = "Count by ProductID"; // Add the summary item to the collection view.GroupSummary.Add(item); // Create and setup the second summary item GridGroupSummaryItem item1 = new GridGroupSummaryItem(); item1.FieldName = "UnitPrice"; item1.SummaryType = DevExpress.Data.SummaryItemType.Sum; item1.DisplayFormat = "Sum = {0:c2}"; item1.ShowInGroupColumnFooter = View.Columns["UnitPrice"]; item1.Tag = "Sum by UnitPrice"; // Add the summary item to the collection view.GroupSummary.Add(item1); |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid '... Dim View As GridView = GridView1 ' Create and setup the first summary item. Dim item As GridGroupSummaryItem = New GridGroupSummaryItem item.FieldName = "ProductID" item.SummaryType = DevExpress.Data.SummaryItemType.Count item.DisplayFormat = "Count = {0}" item.Tag = "Count by ProductID" ' Add the summary item to the collection view.GroupSummary.Add(item) ' Create and setup the second summary item Dim item1 As GridGroupSummaryItem = New GridGroupSummaryItem item1.FieldName = "UnitPrice" item1.SummaryType = DevExpress.Data.SummaryItemType.Sum item1.DisplayFormat = "Sum = {0:c2}" item1.ShowInGroupColumnFooter = View.Columns("UnitPrice") item1.Tag = "Sum by UnitPrice" ' Add the summary item to the collection view.GroupSummary.Add(item1) |
这里,GridSummaryItem.DisplayFormat 属性仅用于演示目的。 要学习更多关于汇总值格式的内容,请参阅 设置汇总值的格式 主题。
为了获取汇总值,使用了 GridView.GetGroupSummaryValues 方法。
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Base; private void gridView1_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e) { GridView currentView = sender as GridView; // The group row's handle. int groupRowHandle; if(e.FocusedRowHandle > 0) groupRowHandle = currentView.GetParentRowHandle(e.FocusedRowHandle); else groupRowHandle = e.FocusedRowHandle; if(!currentView.IsGroupRow(groupRowHandle)) return; // Get group summary values. Hashtable ht = currentView.GetGroupSummaryValues(groupRowHandle); Text = ""; // Iterate through group summaries. foreach(DictionaryEntry entry in ht) { GridGroupSummaryItem sumItem = entry.Key as GridGroupSummaryItem; object val = entry.Value; // Get the summry item's Tag property and summary value. Text += sumItem.Tag.ToString() + ": " + val.ToString() + "\t"; } } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Base Private Sub GridView1_FocusedRowChanged(ByVal sender As Object, _ ByVal e As FocusedRowChangedEventArgs) _ Handles GridView1.FocusedRowChanged Dim currentView As GridView = CType(sender, GridView) ' The group row's handle. Dim groupRowHandle As Integer If (e.FocusedRowHandle > 0) Then groupRowHandle = currentView.GetParentRowHandle(e.FocusedRowHandle) Else groupRowHandle = e.FocusedRowHandle End If If Not currentView.IsGroupRow(groupRowHandle) Then Return ' Get group summary values. Dim ht As Hashtable = currentView.GetGroupSummaryValues(groupRowHandle) Text = "" ' Iterate through group summaries. Dim entry As DictionaryEntry For Each entry In ht Dim sumItem As GridGroupSummaryItem = entry.Key Dim val As Object = entry.Value ' Get the summry item's Tag property and summary value. Text += sumItem.Tag.ToString() + ": " + val.ToString() + "\t" Next End Sub |