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
                };
            }));
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #5
0
 public void Insert(int idx, GroupDescr grp)
 {
     _physical.Insert(idx, default(RecordT));
     _grps.Insert(idx, grp);
 }
Exemple #6
0
 public void Append(GroupDescr grp)
 {
     _physical.Add(default(RecordT));
     _grps.Add(grp);
 }