B1-2 Column Filtering - Filter Action
들어가며
A18, A19 강좌에서 Filter
에 대한 기본적인 이론과 사용방법을 배웠고, B1-1에서 Filter
에 대한 사용법을 배웠습니다.
이 강좌에서는 FilterAction
에 관한 API 사용법을 알아봅시다.
이론
-
FilterAction은 기본 설명
- FilterAction은 Filter와 같이 스스로 동작하는 것이 아니고, FilterAction을 클릭 시 발생하는 GridBase.onFilterActionClicked() 이벤트를 통해서 동작할 내용을 개발자가 구현하는 기능입니다.
- 기본적인 동작을 하는 Filter와 달리 부가적인 행동(다이얼로그 표시 등)을 통해서 Filtering을 결정할 때 사용할 수 있습니다.
- 체크박스를 포함하지 않습니다.
- Filter 목록의 상단에 표시됩니다. 하지만, 표시된(hidden이 false) Filter가 없고, FilterAction이 하나만 존재할 경우 바로 해당 FilterActions의 이벤트가 발생합니다.
-
FilterAction을 생성하는 방법은 다음과 같습니다.
-
컬럼 선언 시 filter속성 지정
gridView.setColumns([{ fieldName: "textField", filterActions : [{ ... }] }]);
-
GridBase.setColumnFilterActions()함수로 FilterAction 정의
해당 컬럼의 기존 모든 FilterAction이 삭제되고 새롭게 생성됩니다.
gridView.setColumnFilterActions(column, actions);
-
-
FilterAction을 제거하는 방법은 다음과 같습니다.
-
GridBase.clearColumnFilterActionss()함수로 제거.
해당 컬럼의 모든 FilterAction이 제거 됩니다.
gridView.clearColumnFilterActions(column);
-
-
FilterAction이 클릭될 때 onFilterActionClicked 이벤트가 발생합니다.
gridView.onFilterActionClicked = function(grid, column, action, x, y) { ... }
실습
-
Grid, Provider용 전역변수 선언
var gridView; var dataProvider;
-
Field및 filter를 포함한 Column구성, 실습을 위한 기초 데이터 구성
TextColumn에 FilterAction을 정의하고, Filter에 A B C D 필터를 모두 hidden속성을 true로 정의합니다. 위에서 설명한 바와 같이 Filter Icon클릭 시 바로 이벤트를 호출하기 위해서입니다.
dataProvider.setFields([{ fieldName: "textField" }, { fieldName: "numberField", dataType: "number" }]); gridView.setColumns([{ fieldName: "textField", name: "textColumn", width: 200, header: {text: "Text Column"}, filterActions : [{ name: "filterAction1", text: "filter 선택" }], filters : [{ name: "A", criteria: "value = 'A'", hidden: true }, { name: "B", criteria: "value = 'B'", hidden: true }, { name: "C", criteria: "value = 'C'", hidden: true }, { name: "D", criteria: "value = 'D'", hidden: true }] }, { fieldName: "numberField", name: "numberColumn", width: 200, header: {text: "Number Column"} }]); dataProvider.setRows([{ textField: "A", numberField: 1 }, { textField: "B", numberField: 2 }, { textField: "C", numberField: 3 }, { textField: "D", numberField: 4 }, { textField: "E", numberField: 5 }]); dataProvider.setRows([{ textField: "A", numberField: 1 }, { textField: "B", numberField: 2 }, { textField: "C", numberField: 3 }, { textField: "D", numberField: 4 }, { textField: "E", numberField: 5 }]);
-
onFilterActionClicked() 콜백 함수 구현
gridView.onFilterActionClicked = function(grid, column, action, x, y) { var filterName = prompt("A에서 D사이의 글자를 입력해주세요.", "A"); if (filterName.length != 1 || filterName < "A" || filterName > "D") { alert("A에서 D까지 한글자만 입력바랍니다.") return; } gridView.activateAllColumnFilters(column, false); // 기존 Filter를 모두 비활성화 gridView.activateColumnFilters(column, filterName, true); // 입력한 filterName을 활성화 };
실행화면
전체 소스코드
SCRIPT
<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 language="javascript"> 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); dataProvider.setFields([{ fieldName: "textField" }, { fieldName: "numberField", dataType: "number" }]); gridView.setColumns([{ fieldName: "textField", name: "textColumn", width: 200, header: {text: "Text Column"}, filterActions : [{ name: "filterAction1", text: "filter 선택" }], filters : [{ name: "A", criteria: "value = 'A'", hidden: true }, { name: "B", criteria: "value = 'B'", hidden: true }, { name: "C", criteria: "value = 'C'", hidden: true }, { name: "D", criteria: "value = 'D'", hidden: true }] }, { fieldName: "numberField", name: "numberColumn", width: 200, header: {text: "Number Column"} }]); dataProvider.setRows([{ textField: "A", numberField: 1 }, { textField: "B", numberField: 2 }, { textField: "C", numberField: 3 }, { textField: "D", numberField: 4 }, { textField: "E", numberField: 5 }]); gridView.onFilterActionClicked = function(grid, column, action, x, y) { var filterName = prompt("A에서 D사이의 글자를 입력해주세요.", "A"); if (filterName.length != 1 || filterName < "A" || filterName > "D") { alert("A에서 D까지 한글자만 입력바랍니다.") return; } gridView.activateAllColumnFilters(column, false); gridView.activateColumnFilters(column, filterName, true); }; }); </script>
HTML
<div id="realgrid" style="width: 100%; height: 200px;"></div>
관련 데모 페이지
API 참조