그리드의 다수의 칼럼 값을 기준으로 필터를 적용한다.
Parameters | Type | Description |
---|---|---|
strFilterOption | STRING | 다중필터 적용 Option (설명참조) |
bShowFilterBtn | BOOL | [옵션] 필터 버튼을 보일지 여부(기본값: true) |
bRefresh | BOOL | [옵션] 그리드 리프레쉬 여부(기본값 true) |
Type | Description |
---|---|
void |
applyfilter, applyfilterex와 다른 점은 여러 칼럼에 대해서 한번에 필터링 조건을 지정할 수 있다는 점과, 필터링 기준 데이터를 SQL의 LIKE 문과 같이 지정할 수 있다는 점이다.
strFilterOption 파라미터는 필터링 기준을 지정하며, 필터링 문자열 또는 필터 옵션 오브젝트 배열값을 가진다.
* 필터 옵션 오브젝트 정보
filter_option = { sub_row_index: 0, // 그리드 서브로우 인덱스 column_index: 0, // 그리드 컬럼 인덱스 compare_type: "=", // 필터 조건 : =,<>,>,>=,<,<= 중 하나 compare_value: "", // 필더 텍스트, 필터 텍스트 규악/예시 참조 compare_and: true, // AND/OR 조건 (true/false) is_ignore_case: false // 대소문자 구분 비교 여부 (true/false) };
* 필터링 문자열 규약
* 필터 조건 규약
* 필터 텍스트 규약
* 필터 텍스트 예시
두번째 파라미터 bShowFilterBtn은 필터 버튼을 보여줄지 여부를 지정하며, 옵션 파라미터로 값을 안주면 true(필터 버튼을 보여줌)이다.
만약 그리드에 대해 많은 작업을 수행하는 경우라면, 해당 파라미터를 false로 주고, 작업 완료시 그리드 refresh 함수를 호출하는 것이 속도면에서 훨씬 빠릅니다.
// 그리드(이름:grdNomal)의 3개의 칼럼으로 구성되어 있다.
// 멀티 필터 적용 테스트 버튼 클릭 이벤트 처리
function btnMultiFilter_on_mouseup()
{
var strFilterOpt = "";
// 1번 컬럼은 데이터가 2 이고
strFilterOpt += "1:=:\"2\":&" + ",";
// 2번 컬럼은 데이터가 ab로 시작하는 데이터 필터링
strFilterOpt += "2:=:\"ab*\":&";
// 필터 버튼을 보이면서, 필터 적용
grdNoraml.applymultifilter(strFilterOpt, true);
// 표시되는 레코드 갯수를 구함
var nShowRowCount = getDisplayRowCount(grdNormal);
// 필터가 적용된 데이터가 존재한다는 의미이기 때문에 리턴
if(nShowRowCount > 0) {
return;
}
// 필터가 적용된 데이터가 존재하지 않는다는 의미
// 필터 해제 확인 창 표시후, 사용자 선택에 따라 필터 해제
var bRet = screen.confirm("필터를 해제하시겠습니까?");
if(bRet == true) {
// 필터 해제
grdNormal.releasefilter();
}
}
// 멀티 필터 적용 테스트 버튼 클릭 이벤트 처리
function btnMultiFilter2_on_mouseup()
{
var arrFilterOpt = [];
// 1번 컬럼은 데이터가 2인 조건
arrFilterOpt.push({
sub_row_index: 0, // 그리드 서브로우 인덱스
column_index: 1, // 그리드 컬럼 인덱스
compare_type: "=", // 필터 조건 : =,<>,>,>=,<,<= 중 하나
compare_value: "2", // 필더 텍스트, 필터 텍스트 규악/예시 참조
compare_and: true, // AND/OR 조건 (true/false)
is_ignore_case: false // 대소문자 구분 비교 여부 (true/false)
});
// 2번 컬럼은 데이터가 ab로 시작하는 조건
arrFilterOpt.push({
sub_row_index: 0, // 그리드 서브로우 인덱스
column_index: 2, // 그리드 컬럼 인덱스
compare_type: "=", // 필터 조건 : =,<>,>,>=,<,<= 중 하나
compare_value: "ab*", // 필더 텍스트, 필터 텍스트 규악/예시 참조
compare_and: true, // AND/OR 조건 (true/false)
is_ignore_case: false // 대소문자 구분 비교 여부 (true/false)
});
// 필터 버튼을 보이면서, 필터 적용
grdNoraml.applymultifilter(arrFilterOpt, true);
}
/**
* 전체 레코드중에서 숨김 처리된 로우수를 구함
* @param objGrid 그리드 오브젝트
* @return 숨김 처리된 로우 카운트
*/
function getDisplayRowCount(objGrid)
{
var i;
var nRowCount = objGrid.getrowcount();
var nDisplayRowCount = 0;
for(i = 0; i < nRowCount; i++) {
// 필터링된 레코드인지 판단
if(objGrid.ishiddenrow(i) == false) {
nDisplayRowCount++;
}
}
return nDisplayRowCount;
}