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 참조
 RealGrid HELP
 RealGrid HELP