XPLATFORM 101
- Grid > Paging(combo)

앞에서 설명한 페이징과 큰차이는 없는데 콤보를 사용한다는 차이가 있네요.

그리드 하단에 페이지 네비게이션을 표기하는 방식은 한번에 표기하는데 제약이 있고
원하는 페이지로 즉시 이동하는데 불편함이 있기 때문에
콤보방식을 선호하기도 합니다.

페이지를 처리하는데 있어 읽기만 제공한다면 문제가 없지만 편집이 들어간다면
접근 방식이 달라지게 됩니다.

무엇이 좋다 나쁘다는 역시 업무에 따라 달리질 수 있겠죠.

페이징 예외 처리를 다루면서...

라는 글도 참고로 읽어보시면 조금 도움이 되실겁니다.

http://cafe.naver.com/xplatform101/169 
XPLATFORM 101
- Grid > Column 필터링

앞에서도 몇 번 언급이 되었지만 그리드에 대한 필터링이 아니라
데이터셋에 대한 필터링입니다.

예제에서 여러개의 필터링 조건을 추가할 수 있는 것은
필터링 메소드 자체가 AND/OR 연산자를 가지고 여러가지 조건을 적용할 수 있기 때문입니다.

쇼케이스에서는 동적으로
그리드에 표현된 데이터를 조건식에 추가해주는 부분이 있는데
여기까지 설명하기에는 조금 벅차서..ㅎ

이 부분을 빼놓으니..필터에 대한 설명은 달랑 한줄이라...


* filter() 메소드 처리시에 주의할점은 한번 적용한 후에 다시 적용을 하게 되면
새로운 조건이 적용된다는 겁니다.
그래서 조건을 초기화 하는 경우에는 filter("")와 같이 날려주기만 하면 됩니다.

http://cafe.naver.com/xplatform101/168 
XPLATFORM 101
- Grid > Paging

의도는 환경에 따라 대용량 데이터를 처리하기가 어려울 경우에 대안으로 사용하고자 하는건데
페이지 단위의 콘텐츠에 대한 경험이 워낙 깊이 박혀있어서 의도적으로 페이지를 구현하고자 원할 수도 있습니다.

예제의 시나리오는 데이터는 한번에 가져오고 화면상에 보여지는 시점에 페이징 효과를 내고 있습니다.

조회 버튼 클릭시 호출되는 함수
function fn_Callback(trid, ErrorCode, ErrorMsg){

if( trid == "tr1" ) {
if( ErrorCode < 0 ) {
trace("Error");
}else{
var iLastRow=iStartPageNo*iUnitSelRowNo;
ds_Server.filter("rowno >= "+(iLastRow+iStartSelRowNo)+" && rowno <= "+(iLastRow+iUnitSelRowNo));
if( ds_Server.getRowCount() == 0 ){
alert("더이상 조회할 자료가 없습니다.");
ds_Server.filter("");
return;
}else{
// Transaction처리하면 아래 세 라인은 삭제하세요..
ds_Client.clearData();
ds_Client.copyData(ds_Server, true);
ds_Client.filter("rowno >= "+(iLastRow+iStartSelRowNo)+" && rowno <= "+(iLastRow+iMaxPageNum));
iServerRowCount=ds_Server.getRowCount();
fn_SetStyle();
fn_SetPageNo();
div_page.stc_No0.style.color="red";
}
}
}
}
ds_server가 메인 데이터셋인데 여기에 필터를 걸어 해당하는 영역에 포함되는 데이터만 가지고 옵니다.
ds_Server.filter("rowno >= "+(iLastRow+iStartSelRowNo)+" && rowno <= "+(iLastRow+iUnitSelRowNo));

그리고 필터링된 데이터셋을 실제 사용될 데이터셋에 복사해놓고 지정된 페이지 단위만큼 다시 필터링릉 걸어줍니다.
ds_Client.copyData(ds_Server, true);
ds_Client.filter("rowno >= "+(iLastRow+iStartSelRowNo)+" && rowno <= "+(iLastRow+iMaxPageNum));

하단의 페이지 번호는 div_page 영역 안에 포함되어 있기 때문에 페이지 이동시마다
로직에 따라 이를 표현해줍니다.
function fn_SetPageNo(){

var sPage=iStartPageNo*iMaxPageNum;
// 이전버튼 처리
if(iStartPageNo < 1){
div_page.stc_Prev.visible=false;
} else {
div_page.stc_Prev.visible=true;
}

// 마지막 버튼 처리
if(iServerRowCount < iUnitSelRowNo){
div_page.stc_Next.visible=false;
}else{
div_page.stc_Next.visible=true;
}

// 인덱스 번호 처리
for(var i=0; i<iMaxPageNum; i++){
eval("div_page.stc_No"+i+".visible=true");
eval("div_page.stc_No"+i+".text="+(sPage+i+1));

if(iServerRowCount < (i*iMaxPageNum)){
eval("div_page.stc_No"+i+".visible=false");
} else {
eval("div_page.stc_No"+i+".visible=true");
}
}
}


데이터셋이 바인딩된 상태에서 페이지를 클릭할때마다 필터링 처리를 해주면서 데이터를 갱신해줍니다.
function div_page_stc_No_onclick(obj:Static,  e:ClickEventInfo){

var iNo=new Number(obj.text);
var iFirstNum=(iNo-1)*iMaxPageNum+1;
var iLastNum=iFirstNum+iMaxPageNum;

fn_SetStyle();
obj.style.color="red";
ds_Client.filter("");
ds_Client.filter("rowno >= "+iFirstNum+" && rowno < "+iLastNum);
}
http://cafe.naver.com/xplatform101/167