DynamicGridAggregateRenderer.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System.Linq;
  2. using System.Windows;
  3. using Syncfusion.Data;
  4. using Syncfusion.UI.Xaml.Grid;
  5. using Syncfusion.UI.Xaml.Grid.Cells;
  6. namespace InABox.DynamicGrid;
  7. public class DynamicGridAggregateRenderer : GridTableSummaryCellRenderer
  8. {
  9. public override void OnUpdateEditBinding(DataColumnBase dataColumn, GridTableSummaryCell element, object dataContext)
  10. {
  11. if (DataGrid == null)
  12. return;
  13. var record = dataContext as SummaryRecordEntry;
  14. if (record == null || record.SummaryRow == null)
  15. return;
  16. foreach (var summaryColumn in record.SummaryRow.SummaryColumns)
  17. {
  18. if (!summaryColumn.MappingName.Equals(dataColumn.GridColumn.MappingName))
  19. continue;
  20. var format = summaryColumn.Format.Replace("{", "").Replace("}", "").Split(':');
  21. var cmd = format.FirstOrDefault();
  22. var fmt = format.Length > 1 ? string.Join(":", format.Skip(1)) : "";
  23. var agg = SummaryCreator.GetSummaryAggregate(summaryColumn, DataGrid.View) as IDynamicGridSummaryAggregate;
  24. if (agg != null)
  25. element.Content = agg.Format(cmd, fmt);
  26. else
  27. base.OnUpdateEditBinding(dataColumn, element, dataContext);
  28. element.HorizontalContentAlignment = dataColumn.GridColumn.TextAlignment == TextAlignment.Left
  29. ? HorizontalAlignment.Left
  30. : dataColumn.GridColumn.TextAlignment == TextAlignment.Center
  31. ? HorizontalAlignment.Center
  32. : HorizontalAlignment.Right;
  33. }
  34. }
  35. }