본문 바로가기
Spread for .NET

grouping과 footer 예제

by 하_늘_바_람 2022. 5. 12.

Grouped 이벤트에 아래의 코드를 작성

private void sprSpread_Grouped(object sender, EventArgs e) {
    sprSpread.ActiveSheet.GroupInfos.Clear();

    // 헤더, 풋터의 레이아웃을 디자인함.
    // 첫번째 그룹
    sprSpread.ActiveSheet.GroupInfos.Add(new GroupInfo() {
        BackColor = Color.WhiteSmoke,
        FooterHorizontalAlignment = CellHorizontalAlignment.Right,
        FooterBackColor = Color.WhiteSmoke
    });

    // 두번째 그룹 이상을 설정함.
    // GroupInfo를 하나더 추가하면 세번째 그룹에 적용됨.
    sprSpread.ActiveSheet.GroupInfos.Add(new GroupInfo() {
        BackColor = Color.Cyan,
        FooterHorizontalAlignment = CellHorizontalAlignment.Right,
        FooterBackColor = Color.Cyan
    });

    foreach (FarPoint.Win.Spread.Model.Group item in 
    	(sprSpread.ActiveSheet.Models.Data as FarPoint.Win.Spread.Model.GroupDataModel)
             .Groups) {
        FooterSum(item);
    }
}

위의 FooterSum(item)의 재귀함수를 만들어서 하위 그룹의 Footer에 합계값을 표시한다.

private void FooterSum(FarPoint.Win.Spread.Model.Group item) {
    DefaultGroupFooter dgf = sprSpread.ActiveSheet.DefaultGroupFooter[item.Column];
    ISheetDataModel dataModel = dgf.DataModel;

    if (item.Rows.Count > 0) {
        foreach (var row in item.Rows) {
            if (row is FarPoint.Win.Spread.Model.Group) {
                FooterSum(row as FarPoint.Win.Spread.Model.Group);
            }
            else {
                break;
            }
        }
    }

    (dataModel as IAggregationSupport).SetCellAggregationType(0, 6, AggregationType.Sum);
    (dataModel as IAggregationSupport).SetCellAggregationFormat(0, 6, "{0:#,0}");
    (dataModel as IAggregationSupport).SetCellAggregationType(0, 7, AggregationType.Sum);
    (dataModel as IAggregationSupport).SetCellAggregationFormat(0, 7, "{0:#,0}");
    (dataModel as IAggregationSupport).SetCellAggregationType(0, 8, AggregationType.Sum);
    (dataModel as IAggregationSupport).SetCellAggregationFormat(0, 8, "{0:#,0}");
    (dataModel as IAggregationSupport).SetCellAggregationType(0, 9, AggregationType.Sum);
    (dataModel as IAggregationSupport).SetCellAggregationFormat(0, 9, "{0:#,0}");
}

결과 화면