Calculate Summary For Selected Rows In Winui Sfdatagrid
caption-summary
datagrid
group-summary
selected-rows
summaries
summary
table-summary
winui
The WinUI DataGrid (SfDataGrid) calculates the summaries for all records by default. You can calculate the summaries for selected records by using the SfDataGrid.SummaryCalculationUnit or GridSummaryRow.CalculationUnit property. This is applicable for all type of summary rows such as table, caption and group summary.
XAML
<dataGrid:SfDataGrid x:Name="sfDataGrid"
Grid.Column="0" Grid.Row="0"
DataContext="{StaticResource salesViewModel}"
ItemsSource="{Binding YearlySales}"
SelectionMode="Multiple"
GridLinesVisibility="Both"
AutoGenerateColumns="False"
AllowResizingColumns="True"
AutoExpandGroups="True"
ColumnWidthMode="Auto">
<dataGrid:SfDataGrid.GroupColumnDescriptions>
<dataGrid:GroupColumnDescription ColumnName="Year" />
</dataGrid:SfDataGrid.GroupColumnDescriptions>
<dataGrid:SfDataGrid.Columns>
<dataGrid:GridTextColumn MappingName="Name" />
<dataGrid:GridNumericColumn MappingName="QS1" NumberFormatter="{Binding SystemCurrency,Source={StaticResource salesViewModel}}" HeaderText="Sales in Q1" TextAlignment="Right" />
<dataGrid:GridNumericColumn MappingName="QS2" NumberFormatter="{Binding SystemCurrency,Source={StaticResource salesViewModel}}" HeaderText="Sales in Q2" TextAlignment="Right" />
<dataGrid:GridNumericColumn MappingName="QS3" NumberFormatter="{Binding SystemCurrency,Source={StaticResource salesViewModel}}" HeaderText="Sales in Q3" TextAlignment="Right" />
<dataGrid:GridNumericColumn MappingName="QS4" NumberFormatter="{Binding SystemCurrency,Source={StaticResource salesViewModel}}" HeaderText="Sales in Q4" TextAlignment="Right" />
<dataGrid:GridNumericColumn MappingName="Total" NumberFormatter="{Binding SystemCurrency,Source={StaticResource salesViewModel}}" HeaderText="Total Sales in Year" TextAlignment="Right" Width="120" />
<dataGrid:GridTextColumn MappingName="Year" IsHidden="True"/>
</dataGrid:SfDataGrid.Columns>
<dataGrid:SfDataGrid.CaptionSummaryRow>
<dataGrid:GridSummaryRow
Title="Sales in {ColumnName} : {Key}"
ShowSummaryInRow="False"
TitleColumnCount="1">
<dataGrid:GridSummaryRow.SummaryColumns>
<dataGrid:GridSummaryColumn
Name="SQS1"
Format="'{Sum:c}'"
MappingName="QS1"
SummaryType="DoubleAggregate" />
<dataGrid:GridSummaryColumn
Name="SQS2"
Format="'{Sum:c}'"
MappingName="QS2"
SummaryType="DoubleAggregate" />
<dataGrid:GridSummaryColumn
Name="SQS3"
Format="'{Sum:c}'"
MappingName="QS3"
SummaryType="DoubleAggregate" />
<dataGrid:GridSummaryColumn
Name="SQS4"
Format="'{Sum:c}'"
MappingName="QS4"
SummaryType="DoubleAggregate" />
</dataGrid:GridSummaryRow.SummaryColumns>
</dataGrid:GridSummaryRow>
</dataGrid:SfDataGrid.CaptionSummaryRow>
<dataGrid:SfDataGrid.GroupSummaryRows>
<dataGrid:GridSummaryRow Title="Total Sales in Year for {ProductCount} Products : {YearSales}" ShowSummaryInRow="True">
<dataGrid:GridSummaryRow.SummaryColumns>
<dataGrid:GridSummaryColumn
Name="YearSales"
Format="'{Sum:c}'"
MappingName="Total"
SummaryType="DoubleAggregate" />
<dataGrid:GridSummaryColumn
Name="ProductCount"
Format="'{Count:d}'"
MappingName="Name"
SummaryType="CountAggregate" />
</dataGrid:GridSummaryRow.SummaryColumns>
</dataGrid:GridSummaryRow>
</dataGrid:SfDataGrid.GroupSummaryRows>
<dataGrid:SfDataGrid.TableSummaryRows>
<dataGrid:GridTableSummaryRow
Title="Total Sales :"
Position="Top"
ShowSummaryInRow="False"
TitleColumnCount="1">
<dataGrid:GridTableSummaryRow.SummaryColumns>
<dataGrid:GridSummaryColumn
Name="TQS1"
Format="'{Sum:c}'"
MappingName="QS1"
SummaryType="DoubleAggregate" />
<dataGrid:GridSummaryColumn
Name="TQS2"
Format="'{Sum:c}'"
MappingName="QS2"
SummaryType="DoubleAggregate" />
<dataGrid:GridSummaryColumn
Name="TQS3"
Format="'{Sum:c}'"
MappingName="QS3"
SummaryType="DoubleAggregate" />
<dataGrid:GridSummaryColumn
Name="TQS4"
Format="'{Sum:c}'"
MappingName="QS4"
SummaryType="DoubleAggregate" />
</dataGrid:GridTableSummaryRow.SummaryColumns>
</dataGrid:GridTableSummaryRow>
<dataGrid:GridSummaryRow Title="Total Sales : {TotalSales}"
ShowSummaryInRow="True">
<dataGrid:GridSummaryRow.SummaryColumns>
<dataGrid:GridSummaryColumn
Name="TotalSales"
Format="'{Sum:c}'"
MappingName="Total"
SummaryType="DoubleAggregate" />
</dataGrid:GridSummaryRow.SummaryColumns>
</dataGrid:GridSummaryRow>
</dataGrid:SfDataGrid.TableSummaryRows>
</dataGrid:SfDataGrid>
<StackPanel VerticalAlignment="Top" Width="200" HorizontalAlignment="Center" Grid.Column="1" Grid.Row="0">
<ComboBox x:Name="summaryUnitComboBox" Margin="20" Header="SummaryCalculationUnit" HorizontalAlignment="Center" SelectionChanged="OnComboBoSexlectionChanged">
<ComboBoxItem>All Rows</ComboBoxItem>
<ComboBoxItem IsSelected="True">Selected Rows</ComboBoxItem>
<ComboBoxItem>Mixed</ComboBoxItem>
</ComboBox>
</StackPanel>
C#
private void OnComboBoSexlectionChanged(object sender, SelectionChangedEventArgs e)
{
if (summaryUnitComboBox.SelectedIndex == 0)
sfDataGrid.SummaryCalculationUnit = Syncfusion.UI.Xaml.Data.SummaryCalculationUnit.AllRows;
else if (summaryUnitComboBox.SelectedIndex == 1)
sfDataGrid.SummaryCalculationUnit = Syncfusion.UI.Xaml.Data.SummaryCalculationUnit.SelectedRows;
else
sfDataGrid.SummaryCalculationUnit = Syncfusion.UI.Xaml.Data.SummaryCalculationUnit.Mixed;
}
Note: The GridSummaryRow.CalculationUnit takes higher priority than the SfDataGrid.SummaryCalculationUnit.
Limitation
SummaryCalculationUnit.SelectedRows or SummaryCalculationUnit.Mixed will not be considered for cell selection.
Documentation
Take a moment to peruse the WinUI SfDataGrid Summaries, where you can find about summaries and it's types with examples.