B2-1 Fixed Rows
들어가며
행과 열 고정이란 그리드의 행(row)과 열(column) 중에서 스크롤에서 제외되는 행과 열을 정의합니다. 다시 말해서, 고정된 행이나 열은 그리드의 다른 데이터들이 스크롤 될때에도 왼쪽과 위쪽에 고정된채 스크롤되지 않습니다.
[A17 강좌]에서 행과 열 고정에 대한 기본적인 이론과 사용방법을 배웠습니다. 이 강좌에서는 행, 열 고정 중에 행 고정(Fixed Rows)상태에 사용할 수 있는 옵션에 대하여 배워보도록 하겠습니다.
이론
행(Row)이나 열(Column)을 고정하기(Fixing)위해서 GridBase.setFixedOptions()함수를 이용합니다.
이 함수의 인자는 FixedOptions라는 클래스이며 반환값은 없습니다. setFixedOptions()함수가 호출되는 즉시 FixedOptions의 속성값에 따라 그리드의 고정상태가 변경됩니다. 그 중에서 행 고정(Fixed Rows)의 옵션에 대해서 알아보도록 하겠습니다.
FixedOptions의 속성중에서 행 고정과 관련된 속성은 아래와 같습니다.
- rowCount
- 고정 행의 개수를 지정하여 고정 행을 그리드 위쪽에 지정합니다.
- 개수 설정으로 개수만큼 행을 고정 시킬 수 있습니다.
- exceptFromFiltering
- 고정 행들이 참조하고 있는 데이터 행들을 필터링에서 제외 합니다.
- true 설정으로 고정 행들이 참조하는 데이터를 필터링에서 제외 시킬 수 있습니다.
- false로 설정하면 고정 행 데이터를 필터링을 할 수 있습니다.
- true설정에서 false로 변경 되면 고정 행의 제외 되었던 데이터 값도 필터링에 포함되어 값이 나오게 됩니다.
- 다시 true로 설정할 경우에 RowId값의 순서에 따라 해당 행의 개수만큼 고정 행에 고정되어 보여지게 됩니다.
- exceptFromSorting
- 고정 행들이 참조하고 있는 데이터 행을 정렬에서 제외 시킵니다.
- true 설정으로 고정 행들이 참조하는 데이터를 정렬에서 제외 시킬 수 있습니다.
- false로 설정하면 고정 행 데이터를 정렬 할 수 있습니다.
- true설정에서 false로 변경되면 고정 행의 제외 되었던 데이터 값도 정렬에 포함되어 정렬되게 됩니다.
- 다시 true로 설정할 경우에 RowId값의 순서에 따라 해당 행의 개수만큼 고정 행에 고정되어 보여지게 됩니다.
- rowEditable
- 다른 속성들과 상관없이 고정 된 행을 수정 할 수 없는 상태로 설정합니다.
- rowEditable : false 설정으로 고정 행의 데이터를 수정 할 수 없는 상태로 만들 수 있습니다.
- true로 설정하면 고정 행의 데이터를 수정 할 수 있습니다.
- rowBarHeight
- 수평 고정 Bar의 설정 필셀 높이 만큼 수평고정 Bar를 설정 합니다.
- 높이 설정으로 높이에 필셀 단위로 숫자값을 설정하면 높이 만큼 수평 고정 Bar가 설정됩니다.
아래 실습을 통하여 FixedOptions의 설정을 변경하는 방법을 확인하세요.
주의사항 행 고정(Fixed Rows)사용시 보여지는 행의 수보다 많은 개수로 고정을 할 경우에는 그리드에 보여지는 모든 행이 고정되어 스크롤이 생기지 않아서 고정 되지 않은 행들에 대하여 조작을 할 수 없게 됩니다. 이 점을 고려하여 사용하시기 바랍니다.
실습
실습에서는 고정된 행에 대한 옵션을 설정 해보면서 설정된 값에 따른 변화를 살펴보도록 하겠습니다. 실습을 위한 행,열 고정에 관련된 설명은[A17 강좌]와 동일하며 이번 실습에서는 행 고정을 위한 실습이므로 행 고정(Fixed Rows)설정만 사용하도록 하겠습니다.
-
행 고정을 위해서 버튼을 클릭하면 고정될 수 있도록 아래 코드를 추가합니다.
$("#btnRowFixing").on("click", function(){ gridView.setFixedOptions({ rowCount: 1 }); })
-
버튼을 클릭하면 고정된 행이 참조하고 있는 데이터를 정렬에서 제외 시키기 위해 아래 코드를 추가합니다.
$("#btnExceptFormSorting").on("click", function(){ gridView.setFixedOptions({ exceptFromSorting: ture }); })
-
버튼을 클릭하면 고정된 행의 데이터를 수정할 수 없는 상태로 만들기 위해 아래 코드를 추가합니다.
$("#btnEditable").on("click", function(){ gridView.setFixedOptions({ rowEditable: false }); })
-
버튼을 클릭하면 고정된 행의 데이터를 필터링에서 제외 시키기 거나 다시 포함시키는 동작을 토글링 하기 위해 아래 코드를 추가합니다.
//고정 행 필터링 제외/포함 토글 $("#btnExceptFromFiltering").on("click", function(){ var bExceptFiltering = !gridView.getFixedOptions().exceptFromFiltering; gridView.setFixedOptions({ exceptFromFiltering: bExceptFiltering }); })
-
버튼을 클릭하면 수평 고정 Bar의 높이를 설정하기 위해 아래 코드를 추가합니다.
$("#btnrowBarHeight").on("click", function(){ gridView.setFixedOptions({ rowBarHeight: 10 }); })
실행화면
-
버튼을 클릭하여 1행 고정하기를 설정합니다. 첫 행이 고정 되었는지 확인합니다.
-
버튼을 클릭하여 고정 행을 정렬에서 제외시켜 줍니다. “이름”컬럼의 헤더 영역을 클릭하여 정렬이 변결될때 고정된 행은 정렬에서 제외되는 것을 확인합니다.
-
버튼 클릭시 고정 행을 수정불가 상태로 만들어 수정을 할 수 없게 합니다. 첫 행의 데이터를 수정을 시도하여 수정되지 않는 것을 확인합니다.
-
버튼을 클릭하여 고정 행을 필터링에서 제외시켜 줍니다. 직업, 성별 컬럼에서 필터링을 통하여 고정 행의 값이 필터링에서 제외된 모습을 확인합니다. 다시 버튼을 클릭하여 고정된 행이 필터링에 포함되는 모습을 확인합니다.
-
버튼을 클릭하여 수평 고정 Bar의 높이를 10으로 설정하여 수평 고정 Bar의 높이를 확인합니다.
전체 소스코드
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/realgridjs-lic.js"></script> <script type="text/javascript" src="/script/realgridjs_eval.1.0.14.min.js"></script> <script type="text/javascript" src="/script/realgridjs-api.1.0.14.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" }, { 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, filters : [{ name: "가수", criteria: "value = '가수'" }, { name: "배우", criteria: "value = '배우'" }] }, { name: "col2", fieldName: "field2", header : { text: "성별" }, width: 50, filters : [{ name: "남자", criteria: "value = '남자'" }, { name: "여자", criteria: "value = '여자'" }] }, { name: "col3", fieldName: "field3", header : { text: "이름" }, width: 80 }, { name: "col4", fieldName: "field4", header : { text: "국어" }, width: 80 }, { name: "col5", fieldName: "field5", header : { text: "수학" }, width: 80 }, { name: "col6", fieldName: "field6", header : { text: "민법" }, width: 80 }, { name: "col7", fieldName: "field7", header : { text: "한국사" }, width: 80 }, { name: "col8", fieldName: "field8", header : { text: "영어" }, width: 80 }, { name: "col9", fieldName: "field9", header : { text: "과학" }, width: 80 }, { name: "col10", fieldName: "field10", header : { text: "사회" }, 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); //행 고정 $("#btnRowFixing").on("click", function(){ gridView.setFixedOptions({ rowCount: 1 }); }) //고정 행 정렬 제외 $("#btnExceptFromSorting").on("click", function(){ gridView.setFixedOptions({ exceptFromSorting: ture }); }) //고정 행 수정 불가 $("#btnEditable").on("click", function(){ gridView.setFixedOptions({ rowEditable: false }); }) //고정 행 필터링 제외/포함 토글 $("#btnExceptFromFiltering").on("click", function(){ var bExceptFiltering = gridView.getFixedOptions().exceptFromFiltering; gridView.setFixedOptions({ exceptFromFiltering: !bExceptFiltering }); }) //수평 고정 Bar 높이 $("#btnrowBarHeight").on("click", function(){ gridView.setFixedOptions({ rowBarHeight: 10 }); }) }); </script>
HTML
1. <button type="button" class="btn btn-primary btn-xs" id="btnRowFixing">1행 고정하기</button> 버튼을 클릭하여 1행 고정하기를 설정합니다. 첫 행이 고정 되었는지 확인합니다. 2. <button type="button" class="btn btn-primary btn-xs" id="btnExceptFromSorting">정렬 제외하기</button> 버튼을 클릭하여 고정 행을 정렬에서 제외시켜 줍니다. "이름"컬럼의 헤더 영역을 클릭하여 정렬이 변결될때 고정된 행은 정렬에서 제외되는 것을 확인합니다. 3. <button type="button" class="btn btn-primary btn-xs" id="btnEditable">수정불가</button>버튼 클릭시 고정 행을 수정불가 상태로 만들어 수정을 할 수 없게 합니다. 첫 행의 데이터를 수정을 시도하여 수정되지 않는 것을 확인합니다. 4. <button type="button" class="btn btn-primary btn-xs" id="btnExceptFromFiltering">필터링 제외/포함 토글</button> 버튼을 클릭하여 고정 행을 필터링에서 제외시켜 줍니다. 직업, 성별 컬럼에서 필터링을 통하여 고정 행의 값이 필터링에서 제외된 모습을 확인합니다. 다시 버튼을 클릭하여 고정된 행이 필터링에 포함되는 모습을 확인합니다. 5. <button type="button" class="btn btn-primary btn-xs" id="btnrowBarHeight">수평 고정 Bar</button> 버튼을 클릭하여 수평 고정 Bar의 높이를 10으로 설정하여 수평 고정 Bar의 높이를 확인합니다. <div id="realgrid" style="width:100%; height:300px;"></div>
데모 사이트
API 참조