Category / Section
How to define summary rows using attached property in WPF DataGrid (SfDataGrid)?
1 min read
WPF DataGrid (SfDataGrid) provides support to show the column summary. If the DataContext of SfDataGrid is ViewModel, you can bind SummaryColumns to a property in ViewModel using the AttachedProperty of type List<GridSummaryColumn>.
Refer to the following code example to define the AttachedProperty of type List<GridSummaryColumn>.
public class SfDataGridAttachedProperty { public static readonly DependencyProperty DynamicSummaryColumnsProperty = DependencyProperty.RegisterAttached("DynamicSummaryColumns", typeof(List<GridSummaryColumn>), typeof(SfDataGridAttachedProperty) , new FrameworkPropertyMetadata(null, OnDynamicSummaryColumnsChanged)); public static void SetDynamicSummaryColumns(UIElement element, List<GridSummaryColumn> value) { element.SetValue(DynamicSummaryColumnsProperty, value); } public static List<GridSummaryColumn> GetDynamicSummaryColumns(UIElement element) { return (List<GridSummaryColumn>)element.GetValue(DynamicSummaryColumnsProperty); } private static void OnDynamicSummaryColumnsChanged(DependencyObject d, DependencyPropertyChangedEventArgs args) { SfDataGrid grid = d as SfDataGrid; if (grid.TableSummaryRows.Count() > 1) { grid.TableSummaryRows.Clear(); } GridTableSummaryRow gsr = new GridTableSummaryRow(); gsr.ShowSummaryInRow = false; var list = ((List<GridSummaryColumn>)args.NewValue); foreach (var item in list) { gsr.SummaryColumns.Add(item); } grid.TableSummaryRows.Add(gsr); } }
Refer to the following code example to populate GridSummaryColumn in Viewmodel.
internal class ViewModel : INotifyPropertyChanged { private List<GridSummaryColumn> _summarycols; public List<GridSummaryColumn> SummaryColumns { get { return _summarycols; } set { _summarycols = value; RaisePropertyChanged("SummaryColumns"); } } public ViewModel() { PopulateEmployeeDetails(); SetSummaryColumns(); } private void SetSummaryColumns() { SummaryColumns = new List<GridSummaryColumn>(); SummaryColumns.Add(new GridSummaryColumn() { MappingName = "EmployeeID", Name = "EmployeeID", SummaryType = SummaryType.CountAggregate, Format = "Total: {Count}" }); SummaryColumns.Add(new GridSummaryColumn() { MappingName = "EmployeeSalary", Name = "EmployeeSalary", SummaryType = SummaryType.DoubleAggregate, Format = "Total: {Sum}" }); } }
Refer to the following code example to bind the attached property in SfDataGrid.
<Syncfusion:SfDataGrid x:Name="sfdatagrid" local:SfDataGridAttachedProperty.DynamicSummaryColumns="{Binding SummaryColumns}" ItemsSource="{Binding EmployeeDetails}"> </Syncfusion:SfDataGrid>