How to: Summarize Empty Cells
- 3 minutes to read
The following example demonstrates how to use custom summaries to count the total number of empty cells in the specified grid column.
<Window x:Class="CustomSummary_EmptyCells.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
Title="Window1" Height="350" Width="450" >
<Grid>
<dxg:GridControl x:Name="grid" CustomSummary="grid_CustomSummary" GroupCount="1">
<dxg:GridControl.SortInfo>
<dxg:GridSortInfo FieldName="Text" />
</dxg:GridControl.SortInfo>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Text" />
<dxg:GridColumn FieldName="Number" />
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView x:Name="view" AutoWidth="True"
NavigationStyle="Cell" ShowTotalSummary="True"/>
</dxg:GridControl.View>
<dxg:GridControl.TotalSummary>
<dxg:GridSummaryItem FieldName="Number" SummaryType="Custom"
DisplayFormat="Total empty cells count: {0}"/>
</dxg:GridControl.TotalSummary>
<dxg:GridControl.GroupSummary>
<dxg:GridSummaryItem FieldName="Number" SummaryType="Custom"
DisplayFormat="Group empty cells count: {0}"/>
</dxg:GridControl.GroupSummary>
</dxg:GridControl>
</Grid>
</Window>
using System.Windows;
using System.Collections.Generic;
using DevExpress.Data;
using DevExpress.Xpf.Data;
using DevExpress.Xpf.Grid;
// ...
namespace CustomSummary_EmptyCells {
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window {
List<TestData> list;
Dictionary<int, bool> selectedValues = new Dictionary<int, bool>();
public Window1() {
InitializeComponent();
list = new List<TestData>();
for (int i = 0; i < 100; i++) {
list.Add(new TestData() { Text = "group " + i % 10, Number = i });
if (i % 3 == 0)
list[i].Number = null;
}
grid.ItemsSource = list;
}
int emptyCellsTotalCount = 0;
int emptyCellsGroupCount = 0;
void grid_CustomSummary(object sender, CustomSummaryEventArgs e) {
if (((GridSummaryItem)e.Item).FieldName != "Number")
return;
if (e.IsTotalSummary) {
if (e.SummaryProcess == CustomSummaryProcess.Start) {
emptyCellsTotalCount = 0;
}
if (e.SummaryProcess == CustomSummaryProcess.Calculate) {
int? val = (int?)e.FieldValue;
if (!val.HasValue)
emptyCellsTotalCount++;
e.TotalValue = emptyCellsTotalCount;
}
}
if (e.IsGroupSummary) {
if (e.SummaryProcess == CustomSummaryProcess.Start) {
emptyCellsGroupCount = 0;
}
if (e.SummaryProcess == CustomSummaryProcess.Calculate) {
int? val = (int?)e.FieldValue;
if (!val.HasValue)
emptyCellsGroupCount++;
e.TotalValue = emptyCellsGroupCount;
}
}
}
public class TestData {
public string Text { get; set; }
public int? Number { get; set; }
}
}
}