B2-2 Row Grouping
들어가며
로우 그룹핑(row grouping)이란 특정 컬럼을 기준으로 그룹핑하는 것을 의미합니다. 즉, 해당 컬럼의 데이터값이 동일한 행을 묶는 것을 의미합니다. [A15 강좌],[A16 강좌]에서 로우 그룹핑(row grouping)에 대한 기본적인 이론과 사용방법을 배웠습니다.  
이 강좌에서는 rowGroup.header, rowGroup.footer, panel의 영역에 데이터를 표시하거나 rowGroup.bar영역의 너비를 조정하고 그룹핑시 rowGroup.header영역을 접거나 펼치는 방법에 대해 배워보겠습니다.
이론
RealGrid는 Grouping을 할 수 있습니다. gridView.setGroupingOptions()함수를 사용해서 그루핑된 영역에 대한 옵션을 설정할 수 있습니다. 그리고 그루핑의 영역 중에서 rowGroup.header, rowGroup.footer영역에 대한 옵션 설정으로 여러가지 값을 표시 할 수 있습니다.
우선 rowGroup의 모든 영역의 위치에 대해서 확인하고 넘어가겠습니다.
rowGroup의 모든 영역은 아래와 같습니다.
- rowGroup.panel : panel에서 그루핑 된 컬럼들의 영역 입니다.
- rowGroup.header : 데이터 셀에서 그루핑 된 컬럼의 정보가 보여지는 영역입니다.
- fowGroup.footer : 데이터 셀에서 필드의 값에 대하여 연산 및 text를 보여줄 수 있는 영역입니다.
- rowGroup.head : 컬럼의 header영역 앞이 head영역 입니다.
- rowGroup.bar : rowGroup.head를 기준으로 아래로 표시되는 영역입니다.
- rowGroup.headerBar : rowGroup.header영역 앞에 데이터 셀을 보거나 숨길 수 있도록 하는 영역입니다.
- rowGroup.footerBar : rowGroup.footer영역 앞의 영역 입니다.
- rowGroup.foot : rowGroup.head를 기준으로 제일 아래에 표시되는 영역 입니다.
RowGroupOptions
- headerStatement : RowGroup 헤더에 표시할 문자열 format을 지정합니다.
- expandedAdornments : RowGroup이 펼쳐진 상태일 때 rowGroup.header, rowGroup.footer영역의 표시 여부를 지정할 수 있습니다.
- collapsedAdornments : RowGorup이 펼쳐지지 않은 상태일 때 rowGroup.header, rowGroup.footer영역의 표시 여부를 지정할 수 있습니다.
- mergeExpander : expander 표시여부를 지정합니다.
- mergeMode : 행 그루핑시 그루핑된 컬럼의 merge표현 여부를 지정합니다.
- levelIndent : 그룹레벨간 들여쓰기 여백을 지정합니다.
    - levelIndent : 30 설정으로 rowGroup.bar영역의 너비를 설정할 수 있습니다.
 
- summaryMode : 각 컬럼의 총 합계 또는 그룹핑된 그룹의 합계나 분산 등 에 대해서 자동으로 계산합니다.
    - rowGroup.footer영역에 합계, 평균, 분산 등 내용 표시방법을 설정할 때 사용합니다.
- rowGroup.footer영역에 값을 표시하기 위해서 필드속성에서 footer에 groupExpression:”avg”와 같이 footer에 대하여 기본적으로 계산방법이 설정되어 있어야 합니다.
- groupExpression에 값으로는 SummaryExpressionType에서 확인하실 수 있습니다.
- groupExpression을 설정하지 않을 경우 rowGroup.footer영역에 계산방법에 대한 설정이 되어있지 않기 때문에 아래의 3가지 옵션이 적용되지 않습니다.
- summaryMode : “none” 컬럼의 합계를 계산하지 않습니다.
- summaryMode : “aggregate” 합,평균,최대값,최소값 등 산술적인 합계를 자동으로 계산합니다.
- summaryMode : “statistaical” 분산, 표준편차 등 통계적 합계를 자동으로 계산합니다.
 
위 옵션중에서 mergeMode, mergeExpander, expandedAdornments, collapsedAdornments에 대한내용은 다음 강좌인 [B2-3 강좌]에서 자세히 배우겠습니다. 이번 강좌에서는 headerStatement옵션과 panel영역의 grouping에 관련된 옵션 설정 방법에 대해서 알아보도록 하겠습니다.
우선 rowGroup.header영역에 표시하기 위한 옵션중 headerStatement은 type이 string이며 값의 format형식은 ${설정값}입니다. 헤더에 표시할 문자열을 format해서 문자열 값을 rowGroup.header영역에 보여주는 gridView.setRowGroup()함수의 RowGroupOptions중에서 headerStatement옵션을 사용해서 RowGrouping에 설정하여 문자열을 rowGroup.header영역에 표시하게 됩니다.
rowGroup.header영역에 표시할 수 있는 headerStatement옵션에 기본 초기 설정 값으로는 “${groupField}: ${groupValue} - ${rowCount} rows”로 설정 되어있지만 원하는 속성으로 바꾸어서 사용하실 수 있습니다. headerStatement옵션에 대한 설정값은 아래와 같습니다.
rowGroup 영역
우선 이 강좌를 연습하기 전에 RealGrid의 Style Regions에서 rowGroup영역들을 이해하는 것이 좋습니다. Style Resion에서 rowGroup관련 영역은 아래와 같습니다.
- rowGroup.panel  
 panel에서 그룹핑 된 컬럼들의 영역 입니다.
- rowGroup.header  
 데이터 셀에서 그룹핑 된 컬럼의 정보가 보여지는 영역입니다.
- fowGroup.footer  
 데이터 셀에서 필드의 값에 대하여 연산 및 text를 보여줄 수 있는 영역입니다.
- rowGroup.head  
 컬럼의 header영역 앞이 head영역 입니다.
- rowGroup.bar  
 rowGroup.head를 기준으로 아래로 표시되는 영역입니다.
- rowGroup.headerBar  
 rowGroup.header영역 앞에 데이터 셀을 보거나 숨길 수 있도록 하는 영역입니다.
- rowGroup.footerBar  
 rowGroup.footer영역 앞의 영역 입니다.
- rowGroup.foot  
 rowGroup.head를 기준으로 제일 아래에 표시되는 영역 입니다.
header에 값 표시하기
rowGroup.header영역에 값을 표시하기 위해 headerStatement속성에 값을 지정합니다. 이 속성에 값을 지정하는 형식은 ${설정값}입니다. 여기서 $는 jQuery와는 아무런 관련이 없습니다.
headerStatement속성에는 초기값이 지정되어 있으며 그 값은 “${groupField}: ${groupValue} - ${rowCount} rows”입니다.
- headerStatement: “문자”
    - 모든 rowGroup.header영역에 문자라는 문자열 값을 표시합니다.
- 문자열 안에 문자는 모든 영역에 같은 문자가 표시 되지만 아래와 같은 설정으로 해당하는 format값들로 표시할 수 있습니다.
 
- 모든 rowGroup.header영역에 
- headerStatement: “${groupField}”
    - 기준 필드의 이름name값을 표시합니다.
 
- 기준 
- headerStatement: “${fieldHeader}”
    - 필드의- header값을 표시합니다.
 
- headerStatement: “${groupColumn}”
    - 컬럼의- name값을 표시합니다.
 
- headerStatement: “${columnHeader}”
    - 컬럼헤더의- "text"를 표시합니다
 
- headerStatement: “${groupValue}”
    - 그룹의- 데이터값을 표시합니다.
 
- headerStatement: “${rowCount}”
    - 데이터행의- 개수를 표시합니다.
 
- headerStatement: “${groupField}: ${groupValue} - ${rowCount} rows”
    - 간단한 수식을 사용하여 계산된 값을 표시합니다.
- 문자열 “ “안에 영역에 문자를 넣어서 표시할 수 있습니다.
 
그리고 GroupingOptions에서는 panel에 메시지를 표시할 수 있으며 그루핑을 할 수 없도록 할 수도 있습니다.
footer영역 메시지 표시
- summaryMode
    - summaryMode속성을 이용해 footer영역에 메시지를 표시하거나 컬럼의 계산결과를 표시 할 수 있습니다.
 
Panel영역에 메시지 표시
- prompt
    - type은 string형식으로 문자열의 내용을 panel에 표시할 수 있습니다.
 
그루핑된 항목 일렬배치
- linear : panel영역에 표시되는 column의 배치 방향을 결정합니다.
    - linear : true 설정으로 panel영역에 표시되는 column들을 일렬로 배치할 수 있습니다.
 
그루핑시 펼침 여부
- expandWhenGrouping : 그루핑시 그룹의 펼침 여부를 지정합니다.
    - expandWhenGrouping : false로 설정할 경우 그루핑시 모든 데이터 필드가 접힌상태로 보여집니다.
 
그룹핑 못하게 하기
- enabled
    - 그룹핑의 가/부를 결정하는 옵션입니다. 기본값은 true로 설정되어 그룹핑이 가능하지만 false로 설정하면 그룹핑을 할 수 없는 상태가 됩니다.
 
bar영역의 너비 변경
- levelIndent
    - levelIndent속성에 숫자값을 입력하면 rowGroup.bar영역의 너비를 설정할 수 있습니다.
 
실습
실습을 통하여 GroupingOptions와 RowGroupOptions의 설정방법을 알아보겠습니다.
- 
    버튼을 클릭하면 panel영역에 그룹핑 전에 표시할 메시지를 설정하기 위해 아래 코드를 추가합니다. $("#btnprompt").on("click", function(){ gridView.setGroupingOptions({ prompt : "panel영역 메시지" }); })
- 
    버튼을 클릭하면 직업과 성별 컬럼을 그룹핑 하기위해 아래 코드를 추가합니다. $("#btnFieldsGroup").on("click", function(){ gridView.groupBy(["field1", "field2"]); })
- 
    버튼을 클릭하면 panel영역의 직업과 성별 컬럼을 일렬로 배치하기 위해 아래 코드를 추가합니다. $("#btnLinear").on("click", function(){ gridView.setGroupingOptions({ linear : true }); })
- 
    버튼을 클릭하면 rowGroup.header영역에 field값이 표시하기 위해 아래 코드를 추가합니다. $("#btnGroupField").on("click", function(){ gridView.setRowGroup({ headerStatement: "${groupField}" }); })
- 
    rowGroup.header영역에 fieldHeader의 내용을 표시하기 위해 fields코드에 header코드를 추가합니다. var fields = [ { fieldName: "field1", header: "fieldName: field1" }, { fieldName: "field2", header: "fieldName: field2" }...
- 
    버튼을 클릭하면 5번에서 설정한 필드의 header값이 rowGroup.header영역에 표시하기 위해 아래 코드를 추가합니다. $("#btnFieldHeader").on("click", function(){ gridView.setRowGroup({ headerStatement: "${fieldHeader}" }); })
- 
    버튼을 클릭하면 컬럼의 name이 rowGroup.header영역에 표시하기 위해 아래 코드를 추가합니다. $("#btnGroupColumn").on("click", function(){ gridView.setRowGroup({ headerStatement: "${groupColumn}" }); })
- 
    버튼을 클릭하면 rowGroup.header영역에 컬럼의 헤더에 “text”값을 표시하기 위해 아래 코드를 추가합니다. $("#btnColumnHeader").on("click", function(){ gridView.setRowGroup({ headerStatement: "${columnHeader}" }); })
- 
    버튼을 클릭하면 rowGroup.header영역에 그룹의 데이터값을 표시하기 위해 아래 코드를 추가합니다. $("#btnGroupValue").on("click", function(){ gridView.setRowGroup({ headerStatement: "${groupValue}" }); })
- 
    버튼을 클릭하면 rowGroup.header영역에 행의 개수를 표시하기 위해 아래 코드를 추가합니다. $("#btnRowCount").on("click", function(){ gridView.setRowGroup({ headerStatement: "${rowCount}" }); })
- 
    버튼을 클릭하면 rowGroup.bar영역의 너비를 설정하기 위해 아래 코드를 추가합니다. $("#btnlevelIndent").on("click", function(){ gridView.setRowGroup({ levelIndent : 30 }); })
- 
    버튼을 클릭하면 rowGroup.footer영역에 값을 계산하지 않기위해 아래 코드를 추가합니다. $("#btnsummaryMode").on("click", function(){ gridView.setRowGroup({ summaryMode : "none" }); })
- 
    버튼을 클릭하면 그룹핑을 할 때 모든 필드가 접힌상태로 나오도록 하기위해 아래 코드를 추가합니다. $("#btnexpandWhenGrouping").on("click", function(){ gridView.setGroupingOptions({ expandWhenGrouping : false }); })
- 
    버튼을 클릭하면 그룹핑을 할 수 없도록 설정하기 위해 아래 코드를 추가합니다. $("#btnGroupenabled").on("click", function(){ gridView.setGroupingOptions({ enabled : false }); })
실행화면
- 
    버튼을 클릭하여 panel영역에 설정한 메시지로 표시해 줍니다. panel영역의 메시지가 변경 되었는지 확인합니다. 
- 
    버튼을 클릭하여 직업컬럼과 성별컬럼을 그룹상태로 만들어 줍니다. 
 직업,성별컬럼이 그룹상태가 되었는지 확인합니다.
- 
    버튼을 클릭하여 panel영역의 컬럼들을 일렬로 배치시켜줍니다. 컬럼들의 배치가 일렬로 되었는지 확인합니다. 
- 
    버튼을 클릭하여 rowGroup.header영역에 필드의 이름을 표시합니다. 해당영역에 FIELD1, FIELD2가 표시되는지 확인합니다. 
- 
    버튼을 클릭하여 rowGroup.header영역에 필드header값을 표시합니다. 해당영역에 필드에 설정했던 헤더값 fieldName:field1이 표시되는지 확인합니다. 
- 
    버튼을 클릭하여 rowGroup.header에 컬럼의 name값을 표시합니다. 해당영역에 col1, col2가 표시되는지 확인합니다. 
실행예를 잘 확인 할 수 있게 실습 버튼 중간에 위치 시켰습니다.
- 
    버튼을 클릭하여 컬럼의 헤더text를 표시합니다. 해당영역에 컬럼의 헤더에 “text”인 직업,성별이 표시되는지 확인합니다.
- 
    버튼을 클릭하여 그룹의 데이터값을 표시합니다. 해당영역에 데이터셀의 값이 표시되는지 확인합니다. 
- 
    버튼을 클릭하여 데이터 행의 개수를 표시합니다. 
- 
    버튼을 클릭하여 rowGroup.bar영역의 너비를 30으로 변경해줍니다. 영역의 너비를 확인합니다. 
- 
    버튼을 클릭하면 rowGroup.footer영역의 값을 계산하지 않습니다. 해당 영역에 값이 표시되지 않는 것을 확인합니다. 
- 
    버튼을 클릭고 그룹핑하면 모든 필드가 접힌상태로 그룹핑됩니다. 다른 컬럼을 그룹핑하여 결과를 확인합니다. 
- 
    버튼을 클릭하면 그룹핑을 할 수 없도록 설정합니다. 그룹핑을 시도하여 결과를 확인합니다. 
전체 소스코드
SCRIPT
<link rel="stylesheet" href="/css/bootstrap.css">
<script type="text/javascript" src="/script/jquery-1.112.min.js"></script>
<script type="text/javascript" src="/script/bootstrap.min.js"></script>
<!--realgrid-->
<script type="text/javascript" src="/script/dlgrids_eval.js"></script>
<script type="text/javascript" src="/script/realgridjs.js"></script>
<script>
var gridView;
var dataProvider;
$(document).ready( function(){
    RealGridJS.setTrace(false);
    RealGridJS.setRootContext("/script");
    
    dataProvider = new RealGridJS.LocalDataProvider();
    gridView = new RealGridJS.GridView("realgrid");
    gridView.setDataSource(dataProvider);
    
    //필드 배열 객체를  생성합니다.
    var fields = [
        {
            fieldName: "field1",
            header: "fieldName: field1"
        },
        {
            fieldName: "field2",
            header: "fieldName: field2"
        },
        {
            fieldName: "field3"
        },
        {
            fieldName: "field4"
        },
        {
            fieldName: "field5"
        },
        {
            fieldName: "field6"
        },
        {
            fieldName: "field7"
        },
        {
            fieldName: "field8"
        },
        {
            fieldName: "field9"
        },
        {
            fieldName: "field10"
        }
    ];
    //DataProvider의 setFields함수로 필드를 입력합니다.
    dataProvider.setFields(fields);
    
    //필드와 연결된 컬럼 배열 객체를 생성합니다.
    var columns = [
        {
            name: "col1",
            fieldName: "field1",
            header : {
                text: "직업"
            },
            width : 60
        },
        {
            name: "col2",
            fieldName: "field2",
            header : {
                text: "성별"
            },
            width: 50
        },
        {
            name: "col3",
            fieldName: "field3",
            header : {
                text: "이름"
            },
            footer: {
                text: "평균=>",
                groupText: "평균=>"
            },
            width: 80
        },
        {
            name: "col4",
            fieldName: "field4",
            header : {
                text: "국어"
            },
            footer: {
                styles: {
                    textAlignment: "near",
                    numberFormat: "0"
                },
                text: "평균",
                expression: "avg",
                groupExpression: "avg"
            },
            width: 80
        },
        {
            name: "col5",
            fieldName: "field5",
            header : {
                text: "수학"
            },
            footer: {
                styles: {
                    textAlignment: "near",
                    numberFormat: "0"
                },
                text: "평균",
                expression: "avg",
                groupExpression: "avg"
            },
            width: 80
        },
        {
            name: "col6",
            fieldName: "field6",
            header : {
                text: "민법"
            },
            footer: {
                styles: {
                    textAlignment: "near",
                    numberFormat: "0"
                },
                text: "평균",
                expression: "avg",
                groupExpression: "avg"
            },
            width: 80
        },
        {
            name: "col7",
            fieldName: "field7",
            header : {
                text: "한국사"
            },
            footer: {
                styles: {
                    textAlignment: "near",
                    numberFormat: "0"
                },
                text: "평균",
                expression: "avg",
                groupExpression: "avg"
            },
            width: 80
        },
        {
            name: "col8",
            fieldName: "field8",
            header : {
                text: "영어"
            },
            footer: {
                styles: {
                    textAlignment: "near",
                    numberFormat: "0"
                },
                text: "평균",
                expression: "avg",
                groupExpression: "avg"
            },
            width: 80
        },
        {
            name: "col9",
            fieldName: "field9",
            header : {
                text: "과학"
            },
            footer: {
                styles: {
                    textAlignment: "near",
                    numberFormat: "0"
                },
                text: "평균",
                expression: "avg",
                groupExpression: "avg"
            },
            width: 80
        },
        {
            name: "col10",
            fieldName: "field10",
            header : {
                text: "사회"
            },
            footer: {
                styles: {
                    textAlignment: "near",
                    numberFormat: "0"
                },
                text: "평균",
                expression: "avg",
                groupExpression: "avg"
            },
            width: 80
        }
    ];
    //컬럼을 GridView에 입력 합니다.
    gridView.setColumns(columns);
   var data = [
       ["배우", "여자", "전도연", "0", "70", "90", "70", "60", "100", "80"],
       ["가수", "여자", "이선희", "1", "33", "90", "70", "60", "100", "80"],
       ["배우", "여자", "하지원", "2", "100", "90", "70", "60", "100", "80"],
       ["가수", "여자", "박정현", "3", "90", "90", "70", "60", "100", "80"],
       ["배우", "여자", "전지현", "4", "100", "90", "70", "60", "100", "80"],
       ["가수", "남자", "성시경", "7", "100", "100", "100", "100", "100", "100"],
       ["가수", "남자", "신해철", "8", "100", "100", "100", "100", "100", "100"],
       ["가수", "남자", "윤상", "9", "100", "100", "100", "100", "100", "100"],
       ["가수", "남자", "윤종신", "10", "100", "100", "100", "100", "100", "100"],
       ["가수", "여자", "이소라", "11", "100", "100", "100", "100", "100", "100"],
       ["배우", "여자", "강소라", "12", "100", "100", "100", "100", "100", "100"],
       ["가수", "남자", "타블로", "13", "100", "100", "100", "100", "100", "100"],
       ["가수", "남자", "이승환", "14", "100", "100", "100", "100", "100", "100"],
       ["가수", "남자", "토이", "15", "100", "100", "100", "100", "100", "100"]
     ];
    dataProvider.setRows(data);
    
    //panel영역 메시지 
    $("#btnprompt").on("click", function(){
        gridView.setGroupingOptions({
            prompt : "panel영역 메시지"
        });
    })   
    
    //작업컬럼 단일그룹
    $("#btnFieldsGroup").on("click", function(){
        gridView.groupBy(["field1","field2"]);
    });
    //panel영역 일렬배치
    $("#btnLinear").on("click", function(){
        gridView.setGroupingOptions({
            linear : true
        });
    })
    //필드의 이름
    $("#btnGroupField").on("click", function(){
        gridView.setRowGroup({
            headerStatement: "${groupField}"
        });
    })
    
    //필드header값
    $("#btnFieldHeader").on("click", function(){
        gridView.setRowGroup({
            headerStatement: "${fieldHeader}"
        });
    })
    
    //컬럼의 이름
    $("#btnGroupColumn").on("click", function(){
        gridView.setRowGroup({
            headerStatement: "${groupColumn}"
        });
    })
    
    //컬럼 헤더 text
    $("#btnColumnHeader").on("click", function(){
        gridView.setRowGroup({
            headerStatement: "${columnHeader}"
        });
    })
    
    //그룹 데이터의 값
    $("#btnGroupValue").on("click", function(){
        gridView.setRowGroup({
            headerStatement: "${groupValue}"
        });
    })
    
    //데이터행의 개수
    $("#btnRowCount").on("click", function(){
        gridView.setRowGroup({
            headerStatement: "${rowCount}"
        });
    })
    //rowGroup.bar너비
    $("#btnlevelIndent").on("click", function(){
        gridView.setRowGroup({
            levelIndent : 30
        });
    })
    //계산하지 않기
    $("#btnsummaryMode").on("click", function(){
        gridView.setRowGroup({
            summaryMode : "none"
        });
    })
    
    //필드 접기 
    $("#btnexpandWhenGrouping").on("click", function(){
        gridView.setGroupingOptions({
            expandWhenGrouping : false
        });
    })
    
    //그룹핑 여부
    $("#btnGroupenabled").on("click", function(){
        gridView.setGroupingOptions({
            enabled : false
        });
    })
});     
</script>
HTML
1. <button type="button" class="btn btn-primary btn-xs" id="btnprompt">panel영역 메시지</button>버튼을 클릭하여 panel영역에 설정한 메시지로 표시해 줍니다. panel영역의 메시지가 변경 되었는지 확인합니다. 2. <button type="button" class="btn btn-primary btn-xs" id="btnFieldsGroup">직업, 성별컬럼으로 그룹잡기</button>버튼을 클릭하여 직업컬럼과 성별컬럼을 그룹상태로 만들어 줍니다. 직업,성별컬럼이 그룹상태가 되었는지 확인합니다. 3. <button type="button" class="btn btn-primary btn-xs" id="btnLinear">panel영역 일렬배치</button>버튼을 클릭하여 panel영역의 컬럼들을 일렬로 배치시켜줍니다. 컬럼들의 배치가 일렬로 되었는지 확인합니다. 4. <button type="button" class="btn btn-primary btn-xs" id="btnGroupField">필드의 이름</button>버튼을 클릭하여 rowGroup.header영역에 필드의 이름을 표시합니다. 해당영역에 FIELD1, FIELD2가 표시되는지 확인합니다. 5. <button type="button" class="btn btn-primary btn-xs" id="btnFieldHeader">필드header값</button>버튼을 클릭하여 rowGroup.header영역에 필드header값을 표시합니다. 해당영역에 필드에 설정했던 헤더값 fieldName:field1이 표시되는지 확인합니다. 6. <button type="button" class="btn btn-primary btn-xs" id="btnGroupColumn">컬럼의 이름</button>버튼을 클릭하여 rowGroup.header에 컬럼의 name값을 표시합니다. 해당영역에 col1, col2가 표시되는지 확인합니다. <p style="font-size: small;">실행예를 잘 확인 할 수 있게 실습 버튼 중간에 위치 시켰습니다.</p> <div id="realgrid" style="width: 100%; height: 300px;"></div> <p></p> 7. <button type="button" class="btn btn-primary btn-xs" id="btnColumnHeader">컬럼 헤더text</button>버튼을 클릭하여 컬럼의 헤더text를 표시합니다. 해당영역에 컬럼의 헤더에 "text"인 직업, 성별이 표시되는지 확인합니다. 8. <button type="button" class="btn btn-primary btn-xs" id="btnGroupValue">그룹 데이터의 값</button>버튼을 클릭하여 그룹의 데이터값을 표시합니다. 해당영역에 데이터셀의 값이 표시되는지 확인합니다. 9. <button type="button" class="btn btn-primary btn-xs" id="btnRowCount">데이터 행의 개수</button>버튼을 클릭하여 데이터 행의 개수를 표시합니다. 10. <button type="button" class="btn btn-primary btn-xs" id="btnlevelIndent">rowGroup.bar영역 너비</button>버튼을 클릭하여 rowGroup.bar영역의 너비를 30으로 변경해줍니다. 영역의 너비를 확인합니다. 11. <button type="button" class="btn btn-primary btn-xs" id="btnsummaryMode">rowGroup.footer영역 계산하지않기</button>버튼을 클릭하면 rowGroup.footer영역의 값을 계산하지 않습니다. 해당 영역에 값이 표시되지 않는 것을 확인합니다. 12. <button type="button" class="btn btn-primary btn-xs" id="btnexpandWhenGrouping">필드 접기</button>버튼을 클릭고 그룹핑하면 모든 필드가 접힌상태로 그룹핑됩니다. 다른 컬럼을 그룹핑하여 결과를 확인합니다. 13. <button type="button" class="btn btn-primary btn-xs" id="btnGroupenabled">그룹핑 불가능</button>버튼을 클릭하면 그룹핑 불가 상태로 설정합니다. 그룹핑을 시도하여 결과를 확인합니다.
데모 사이트
API 참조
 RealGrid HELP
 RealGrid HELP