
page : 3 / pageSize : 20 일때 skip과 take는?
(자동계산)
skip = (page-1) * take = 2*20 = 40
take = pageSize = 20 이 된다.
$("#grid").kendoGrid({
dataSource: {
data: null,
transport: {
read: {
dataType: "json",
contentType: "application/json; charset=utf-8",
url: 'url주소',
type: "POST",
beforeSend: function(xhr) {
xhr.setRequestHeader($("meta[name='_csrf_header']").attr("content"), $("meta[name='_csrf']").attr("content"));
}
},
parameterMap:function(options){
var param = $filter();
options.startDtTm =param.startDtTm;
options.endDtTm = param.endDtTm;
return JSON.stringify(options);
}
},
schema: {
data: "data",
total: "total",
},
//page: 1, //초기화할때 첫 로딩 페이지 지정
serverPaging: true,// 이 위치에 있지 않으면 , parameterMap에 넘어가는 option 값에 페이지 관련 필드 안넘어감 .take,skip,page,pageSize
},
columns: [
{ field: "sn", title: "순번", sortable: true, width: "65px", template: "#=sn #" },
{ field: "info", title: "정보", width: "180px", template: "#= info != null ? info : '-' #", sortable: false},
{
field: "file",title: "파일첨부",width: "50px",sortable:false,
template: function(data) {
if (data.file) {
return '<div class = "fileIcon" >'+
'<img style="margin-inline: auto;" className="fileIco" src="' + contextPath + '/images/icons/ico_file.png" alt="파일다운로드 아이콘"/>'+
'</div>'
} else {
return '파일없음';
}
}
},
],
change: function(){}
dataBound: function(e){
$('.fileIcon').click(function(){
var grid = $('#grid').data("kendoGrid");
var dataItem = grid.dataItem($(this).closest("tr"));
var data = dataItem;
.......
},
navigatable: true,
sortable: {
mode: "single", // 단일 컬럼에 대한 정렬
allowUnsort: true // 이 옵션을 통해 정렬 해제를 허용함으로 에러 해결 클릭순서대로 : asc>desc>정렬해제 순으로 진행됨
},
pageable: {
pageSize: 10,
buttonCount: 5,
},
noRecords: {
template: "데이터가 없습니다."
},
editable: false,
resizable: true,
selectable: "row"
});
sortable: true
위처럼 true로 설정하면 아래와 같이 sort: Array(1)가 추가 되는것을 알 수있다.
.


sort 배열 안을 보면 클릭한 컬럼의 방향이 asc(오름차순)으로 설정 되는것을 확인 할 수 있다.
한번 더 해당 컬럼을 클릭하면

같이 desc(내림차순)으로 변경되는 것을 알 수 있다.
이것을 이용해 , 서버단에서 데이터를 정렬 가능하다.
<foreach item="sortItem" collection="sort">
<if test="sortItem.field != null and sortItem.dir != null">
<choose>
<when test="sortItem.dir == 'asc' and sortItem.field == 'sn'">
user_id ASC,
</when>
<when test="sortItem.dir == 'desc' and sortItem.field == 'sn'">
user_id DESC,
</when>
</choose>
</if>
</foreach>
디폴트값은 false로 클라이언트 데이터 항목을 페이징 한다.
true로 활성화 설정되면 페이징 구현은 원격서비스에 맡긴다.
- 활성화 되면
page : 반환할 페이지
pageSize : 반환할 앙목의 수
skip : 건너뛸 데이터의 수
take :반환할 데이터 항목 수 (=pageSize와 동일)
현재페이지와 페이지크기를 기반으로 skip과 take(가져오기) 값이 자동계산됨
콘솔창 결과

그러나 pageable에 이 값을 true설정하게 되면 위의 페이지관련 정보가 parameterMap 으로 넘어가지 않으니 주의!
sortable: {
mode: "single", // 단일 컬럼에 대한 정렬
allowUnsort: true // 이 옵션을 통해 정렬 해제를 허용함으로 에러 해결 클릭순서대로 : asc>desc>정렬해제 순으로 진행됨
},
추가시켜 첫번째 클릭(ASC) 두번째 클릭(DESC) 세번째 클릭(정렬해제) 순으로 해주었고 ,
SQL 에서는
<if test = "sort == null or sort.isEmpty">
sort.isEmpty 일때 별도의 정렬처리를 함으로써 에러를 해결 할 수 있었다.
참고자료
KendoGrid