public IEnumerable <HTMLElement> BuildSummaryRow( IEnumerable <RecordT> allItems, GroupDescr grp, IEnumerable <IDataGridColumn <RecordT> > colls) { return (colls.Select(x => { if (!x.IsGrouped && x.CurrentAggregation == null) { return new HTMLSpanElement { TextContent = "" }; } if (x.IsGrouped) { return new HTMLSpanElement { TextContent = grp.UserFriendlyGroupName }; } var result = x.CurrentAggregation( allItems .Skip(grp.FromPhsIdx) .Take(1 + grp.TillPhsIdx - grp.FromPhsIdx)); return new HTMLSpanElement { TextContent = result }; })); }
private void InsertGroupTrailer(int pos, GroupDescr grp) { _visRows.Insert(pos, grp); var elems = _model.CurrentGroupingLogic.BuildSummaryRow(_model.Items, grp, _model.Columns); _view.InsertBodyRow(pos, elems); }
private void AppendGroupTrailer(GroupDescr grp) { var elems = _model.CurrentGroupingLogic.BuildSummaryRow(_model.Items, grp, _model.Columns); _visRows.Append(grp); var pos = _view.BodyRowCount; _view.InsertBodyRow(pos, elems); }
public static List <GroupDescr> GroupRecordsByKey <T>( IEnumerable <T> allItems, Func <T, object> buildGroupingKey, Func <GroupDescr, string> summaryProvider) { var result = new List <GroupDescr>(); object curKey = null; GroupDescr cur = null; allItems.ForEachI((i, x) => { if (cur == null) { curKey = buildGroupingKey(x); cur = new GroupDescr { FromPhsIdx = 0, FromVisIdx = 0, TillPhsIdx = -1 + 1, TillVisIdx = 0 + 1, KeyData = curKey }; result.Add(cur); return; } var key = buildGroupingKey(x); if (key.Equals(curKey)) { cur.TillPhsIdx++; cur.TillVisIdx++; return; } curKey = key; cur = new GroupDescr { FromPhsIdx = i, FromVisIdx = cur.TillVisIdx + 1, TillPhsIdx = i, TillVisIdx = cur.TillVisIdx + 2, KeyData = key }; result.Add(cur); }); result.ForEach(x => x.UserFriendlyGroupName = summaryProvider(x)); return(result); }
public void Insert(int idx, GroupDescr grp) { _physical.Insert(idx, default(RecordT)); _grps.Insert(idx, grp); }
public void Append(GroupDescr grp) { _physical.Add(default(RecordT)); _grps.Add(grp); }