|
@@ -578,6 +578,41 @@ public class DynamicGridGridUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
|
|
|
#region Columns
|
|
|
|
|
|
+ private void LoadStackedHeaders(DynamicGridColumnGroupings groupings)
|
|
|
+ {
|
|
|
+ DataGrid.StackedHeaderRows.Clear();
|
|
|
+ foreach(var grouping in groupings)
|
|
|
+ {
|
|
|
+ var row = new StackedHeaderRow();
|
|
|
+ var i = 0;
|
|
|
+ foreach(var group in grouping.Groups)
|
|
|
+ {
|
|
|
+ var start = Math.Max(i, ColumnList.IndexOf(group.StartColumn));
|
|
|
+ var end = Math.Max(start, ColumnList.IndexOf(group.EndColumn));
|
|
|
+
|
|
|
+ if(end < start)
|
|
|
+ {
|
|
|
+ i = end + 1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ var cols = Enumerable.Range(start, end - start + 1).Select(i => DataGrid.Columns[i]).ToArray();
|
|
|
+
|
|
|
+ var stackedColumn = new StackedColumn
|
|
|
+ {
|
|
|
+ HeaderText = group.Header,
|
|
|
+ ChildColumns = string.Join(',', cols.Select(x => x.MappingName))
|
|
|
+ };
|
|
|
+
|
|
|
+ row.StackedColumns.Add(stackedColumn);
|
|
|
+
|
|
|
+ i = end + 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ DataGrid.StackedHeaderRows.Add(row);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private readonly List<DynamicColumnBase> ColumnList = new();
|
|
|
|
|
|
private List<DynamicActionColumn> ActionColumns = new();
|
|
@@ -602,6 +637,8 @@ public class DynamicGridGridUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ private ObservableCollection<ISummaryColumn> Summaries = new();
|
|
|
+
|
|
|
private void LoadActionColumns(DynamicActionColumnPosition position)
|
|
|
{
|
|
|
for (var i = 0; i < ActionColumns.Count; i++)
|
|
@@ -613,6 +650,13 @@ public class DynamicGridGridUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
var sColName = string.Format("ActionColumn{0}", i);
|
|
|
gridRowResizingOptions.ExcludeColumns.Add(sColName);
|
|
|
|
|
|
+ var summary = column.Summary();
|
|
|
+ if (summary != null)
|
|
|
+ {
|
|
|
+ summary.MappingName = sColName;
|
|
|
+ Summaries.Add(summary);
|
|
|
+ }
|
|
|
+
|
|
|
if (column is DynamicImageColumn imgcol)
|
|
|
{
|
|
|
var newcol = new GridImageColumn();
|
|
@@ -868,11 +912,8 @@ public class DynamicGridGridUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
column.FilterRowCellStyle = filterstyle;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
private void LoadDataColumns(DynamicGridColumns columns)
|
|
|
{
|
|
|
- var Summaries = new ObservableCollection<ISummaryColumn>();
|
|
|
-
|
|
|
foreach (var column in columns)
|
|
|
{
|
|
|
if (this.CreateEditorColumn(column, out var newcol, out var prop))
|
|
@@ -948,6 +989,10 @@ public class DynamicGridGridUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ }
|
|
|
+
|
|
|
+ private void LoadSummaries()
|
|
|
+ {
|
|
|
if (Summaries.Any())
|
|
|
{
|
|
|
DataGrid.CellRenderers.Remove("TableSummary");
|
|
@@ -962,7 +1007,7 @@ public class DynamicGridGridUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void RefreshColumns(DynamicGridColumns columns, DynamicActionColumns actionColumns)
|
|
|
+ public void RefreshColumns(DynamicGridColumns columns, DynamicActionColumns actionColumns, DynamicGridColumnGroupings groupings)
|
|
|
{
|
|
|
// Yo, please don't remove this.
|
|
|
// The issue was when we were dynamically adding ActionColumns, and if we had to remove and then re-add them, we were getting massive performance hits
|
|
@@ -981,9 +1026,12 @@ public class DynamicGridGridUIComponent<T> : IDynamicGridUIComponent<T>, IDynami
|
|
|
|
|
|
ActionColumns = actionColumns.ToList();
|
|
|
|
|
|
+ Summaries.Clear();
|
|
|
LoadActionColumns(DynamicActionColumnPosition.Start);
|
|
|
LoadDataColumns(columns);
|
|
|
LoadActionColumns(DynamicActionColumnPosition.End);
|
|
|
+ LoadSummaries();
|
|
|
+ LoadStackedHeaders(groupings);
|
|
|
|
|
|
DataGrid.Columns.Resume();
|
|
|
DataGrid.RefreshColumns();
|