SBGrid는 부분합계(subtotal) 기능을 제공합니다.


요약

그리드에서 표현되는 숫자 데이터를 연산하는 기능을 제공합니다.

입력값

String 첫번째 : 연산함수 (sum, average)


Number 두번째 : groupColumn, 그룹으로 묶여질 Key, 계산을 수행 할 영역의 기준이 되는 열의 인덱스<


Number 세번째 : totalColumn, 계산을 수행 할 실제 데이터 값을 갖는 열의 인덱스


String 네번째 : format, 계산결과를 표시할 때 사용할 포맷을 지정


String 다섯번째 : style, 계산결과를 표시하는 행의 스타일 지정


Number 여섯번째 : caption, 추가되는 행의 제목


Number 일곱번째 : fill text, 부분합계 Row 의 Title 의 문자열, 병합을 하기 위해서 데이터 영역의 처음 위치부터 groupColumn 전까지 모든 텍스트로 추가되는 행에 복사


Number 여덟번째 : [true : 모든 텍스트를 추가되는 행에 복사 , false : 텍스트 복사하지 않음]



예) datagrid1.subtotal("sum", datagrid1.colRef("Country"), datagrid1.colRef("CO2emissions"), "#,###", "font-weight:bold;color:#0000FF;", 0, "sum : ");
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@page language="java"   contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko">
<head>
	<meta content="IE=9" http-equiv="X-UA-Compatible">
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>SoftBowl SBGrid Example</title>
	<script type="text/javascript" src="../../kr/co/softbowl/js/Library/json-minified.js"></script>
	<script type="text/javascript" src="../../js/jquery-1.7.2.min.js"></script>
	<script type="text/javascript" src="../../kr/co/softbowl/js/Library/json2.js"></script>
		
	<script type="text/javascript" src="../../kr/co/softbowl/SBGrid.js"></script>
	
	<script type="text/javascript" src="../../js/DATA_World_Bank_Statistics_small.js"></script>
		
	<script type="text/javascript">			
		SBGrid.DEF.DOMAIN = "../../";
	<script>
	
	<script type="text/javascript">
        
         var datagrid1;
       	 $(document).ready(function () {
	     	__createElements();
		 });
		
		 function __createElements() {
		     var GridInitInfo = {
						"strParentId": "sbGridArea",
						"strId": "datagrid1",
						"strCaption": "Country^Year^CO2\nemissions^Electric\npower consumption^Energy use^Fertility rate, total\n(births per woman)^GNI per capita, Atlas method\n(current US$)^Internet users\n(per 1,000 people)^Life expectancy at birth,\ntotal(years)^Military expenditure\n(% of GDP)^Population, total^Prevalence of HIV total\n(% of population ages 15-49)",
						"strColWidth": "100,50,100,150,100,150,200,150,180,180,130,200",
						"strRowHeight": "50",
						"strJsonRef": "grid_data",
						"strDataHeight": "29",
						"strBackColorAlternate": "#f7f7f7",
						"strStyle": "width:100%; height:480px; ",
						"bAutoResize": true
		     };
			
			  var SBGridColumnInitInfo = [
		                             { "id": "col1", "type": "output", "ref": "Country", "style": "text-align:center" },
		                             { "id": "col2", "type": "output", "ref": "Year", "style": "text-align:center" , "bDataMerge" : false},
		                             { "id": "col3", "type": "output", "ref": "CO2emissions", "style": "text-align:right;padding-right:5px" , "bDataMerge" : false},
		                             { "id": "col4", "type": "output", "ref": "Electric_power_consumption", "style": "text-align:right;padding-right:5px" ,"bDataMerge" : false},
		                             { "id": "col5", "type": "output", "ref": "Energy_use", "style": "text-align:right;padding-right:5px" , "bDataMerge" : false},
		                             { "id": "col6", "type": "output", "ref": "Fertility_rate", "style": "text-align:right;padding-right:5px" , "bDataMerge" : false},
		                             { "id": "col7", "type": "output", "ref": "GNI", "style": "text-align:right;padding-right:5px" , "bDataMerge" : false},
		                             { "id": "col8", "type": "output", "ref": "Internet_users", "style": "text-align:right;padding-right:5px" , "bDataMerge" : false},
		                             { "id": "col9", "type": "output", "ref": "Life_expectancy", "style": "text-align:right;padding-right:5px" , "bDataMerge" : false},
		                             { "id": "col10", "type": "output", "ref": "Military_expenditure", "style": "text-align:right;padding-right:5px", "bDataMerge" : false },
		                             { "id": "col11", "type": "output", "ref": "Population", "format": "#,###", "style": "text-align:right;padding-right:5px" , "bDataMerge" : false},
		                             { "id": "col12", "type": "output", "ref": "Prevalence_of_HIV", "style": "text-align:right;padding-right:5px", "bDataMerge" : false }
		     ];
		     
		     if (SBGrid.getGrid('datagrid1') != null) {
	             datagrid1.destroy();
	             datagrid1 = null;
	         }
		
		     datagrid1 = createSBGrid(GridInitInfo, SBGridColumnInitInfo);
			    
		 }
		 function createSBGrid(SBGridInitInfo, SBGridColumnInitInfo) {
		     var objJSONdata = new Object();
		     objJSONdata.objSBGridInitInfo = SBGridInitInfo;
		     objJSONdata.arSBGridColumnInitInfo = SBGridColumnInitInfo;
		     return SBGrid.DEF.createSBGrid(objJSONdata);
		 };
		 
		 var bIsSubtotal = false;
		 function executeSubtotal_above()
	     {
			 executeSubtotal("above");
	     }
	     
	     function executeSubtotal_below()
	     {
	    	 executeSubtotal("below");         
	     }
	     
	     function executeSubtotal(type)
	     {
	    	 if (!bIsSubtotal) {    		 
	    	 
	          datagrid1.setSubTotalPosition(type);
	          datagrid1.subtotal("clear", 0, 0);
	          datagrid1.subtotal("sum", datagrid1.colRef("Country"), datagrid1.colRef("CO2emissions"), "", "font-weight:bold;color:#0000FF;", 0, "sum : ");
	          datagrid1.subtotal("sum", datagrid1.colRef("Country"), datagrid1.colRef("Electric_power_consumption"), "", "font-weight:bold; color:#0000FF;", 0, "sum : ");
	          datagrid1.subtotal("sum", datagrid1.colRef("Country"), datagrid1.colRef("GNI"), "#,###.##", "font-weight:bold; color:#0000FF;", 0, "sum : ");
	          datagrid1.subtotal("average", datagrid1.colRef("Country"), datagrid1.colRef("CO2emissions"), "", "font-weight:bold;color:#FF0000;", 0, "average : ");
	          datagrid1.subtotal("average", datagrid1.colRef("Country"), datagrid1.colRef("Electric_power_consumption"), "", "font-weight:bold; color:#FF0000;", 0, "average : ");
	          datagrid1.subtotal("average", datagrid1.colRef("Country"), datagrid1.colRef("GNI"), "#,###.##", "font-weight:bold; color:#FF0000;", 0, "average : ");
	
	          var columnsArr = ["CO2emissions", "Electric_power_consumption", "GNI"];//조회시 데이터를 변경할 컬럼의 ref값
	
	          dataReplace(columnsArr, 2);
	          
	          bIsSubtotal = true;
	          
	    	 }
	          
	     }
		
		 function dataReplace(columnsArr, nDecimalPlaces) {
		     var columnsIndexArr = [];
		
		     // 해당 컬럼에 대한 index 를 찾는다.
		     for (var k = 0; k < columnsArr.length; k++) {
		         for (var j = 0; j < datagrid1.getCols() ; j++) {
		             if (columnsArr[k] == datagrid1.getRefOfCol(j)) {
		                 columnsIndexArr.push(j);
		             }
		         }
		     }
		     // header 에 대한 skip 으로 1부터 시작
		     for (var i = 1; i < datagrid1.getRows() ; i++) {
		         for (var j = 0; j < columnsIndexArr.length; j++) {
		             var originData = datagrid1.getTextMatrix(i, columnsIndexArr[j]);
		             datagrid1.setTextMatrix(i, columnsIndexArr[j], parseFloat(originData).toFixed(nDecimalPlaces).replace(/\B(?=(\d{3})+(?!\d))/g, ","));
		         }
		     }
		
		 }
    </script>
</head> 
<body onload="__createElements()" class="sbgrid_body">
    <div class="topNav">
        <div class="hdTxt">Subtotal</div>
    </div><br/>
    <div id="contents">
        <div class="sbgrid_explanation">
            <font id="sbgrid_explanation1">SBGrid는 부분합계 기능을 제공합니다.</font>
        </div>
        <div class="sep_group"><img class="sep_line" alt="공지사항" src="../../images/sep_line1.png" /></div>
        <div id="button_group">
            <input type="button" class="sbgrid_demo_button" style="width:700px; height:30px;" id="button_subtotal" value="부분합계 구하기" onclick="executeSubtotal();"></input>
        </div>
        <div class="content_group">
            <div id="sbGridArea"></div>
        </div>
    </div>
</body>
</html>