Translate

[jqGrid] jQuery UI 통합 설명







실습 jqGrid 버전: CDN 제공하는 v4.6 버전으로 테스트


정렬 가능한 컬럼(Columns)

 - 이 메소드는 jqGrid에 통합되어있어 별다른 작업을 할 필요가 없다. 메소드를 사용하면 마우스를 사용하여 그리드 컬럼을 재정렬 할 수 있다.
이 경우에 필요한 설정은 jqGrid의 sortable 옵션을 true로 해주면 된다.

<script type="text/javascript">
jQuery(document).ready(function(){ 
  jQuery("#list").jqGrid({
    url:'example.php',
    datatype: 'xml',
    mtype: 'GET',
    colNames:['Inv No','Date', 'Amount','Tax','Total','Notes'],
    colModel :[ 
      {name:'invid', index:'invid', width:55}, 
      {name:'invdate', index:'invdate', width:90}, 
      {name:'amount', index:'amount', width:80, align:'right'}, 
      {name:'tax', index:'tax', width:80, align:'right'}, 
      {name:'total', index:'total', width:80, align:'right'}, 
      {name:'note', index:'note', width:150, sortable:false} 
    ],
    pager: '#pager',
    rowNum:10,
    rowList:[10,20,30],
    sortname: 'invid',
    sortorder: 'desc',
    viewrecords: true,
    caption: 'My first grid',
    sortable: true
  }); 
}); 
</script>

사용된 jQuery UI 위젯 및 기타 플러그인
 - jQuery UI core
 - jQuery UI sortable widget





컬럼 선택기 (Column Chooser)

 - 이 메소드를 사용하여 그리드에서 컬럼의 순서를 바꾸거나 보이기/감추기 설정을 할수 있다.

old_API
jQuery("#list").columnChooser(options);
new_API
jQuery("#list").jqGrid('columnChooser', options);
options - 아래 나열된 속성을 가진 객체 (하단 옵션 설명 참고)
1004lucifer
* 이 메소드에서 정렬 기능을 사용하려면 jqGrid 보다 jQuery multiselect 플러그인이 우선적으로 로드되어야 한다.


이 함수를 호출한 후 모달 대화상자가 열리고 사용자는 컬럼을 보이거나 숨길수 있고 순서도 바꿀 수 있다.


옵션
1004lucifer
Name Type Description Default
title string 모달 대화상자의 타이틀 See $.jgrid.col.title in language file
width number 다이얼로그의 가로길이 (픽셀) 420
height number 다이얼로그의 세로길이 (픽셀) 240
classname string 그리드 생성되는 선택자(selector)에 추가될 class null
done function 사용자가 Ok 버튼을 누를 때 호출될 함수.
현재는 컬럼을 재정렬 하기위해 remapColumns 메소드를 호출하도록 구현되어있다.
msel mixed msel 은 아래의 값을 설정할 수 있다.
- multiselect 를 확장한 ui 위젯 class의 이름
- multiselect 객체 생성 함수 (매개변수가 없거나 object를 전달)
- 소멸 ('destroy' 문자열 설정 시)
multiselect
dlog mixed dlog 는 아래의 값을 설정할 수 있다.
- 대화상자와 같은 방식으로 작동하는 ui 위젯 class의 이름
- 대화상자 생성 함수 (dlog_opts 설정 시)
- 소멸 ('destroy' 문자열 설정 시)
dialog
dlog_opts mixed dlog_opts 는 dlog에 전달할 옵션객체 이거나 옵션객체를 생성하는 함수일 수 있다.
기본값은 ui.dialog 객체에 적당한 옵션을 생성한다.
cleanup function 대화상자를 정리하고 선택하는 함수.
또한 다른 변경없이 종료함수(done function)를 호출한다. (columnChooser 가 중단되었음을 나타낸다)

위에서 정의된 종료함수(done function)는 jqGrid코드에서 다음과 같이 정의되어있다.
opts = $.extend({
...
"done" : function(perm) { if (perm) self.jqGrid("remapColumns", perm, true) },
...
});
재정렬 후 다른 작업을 수행하려면 이 옵션을 재정의 할 수 있다.
예를들어 사용자가 일부 컬럼을 보여주거나 숨긴 후 페이지의 일부 요소 너비를 다시 계산한다고 가정하면 다음과 같이 할 수 있다.
jQuery("#list").jqGrid('columnChooser', {
   done : function (perm) {
      if (perm) {
          // "OK" button are clicked
          this.jqGrid("remapColumns", perm, true);
          // the grid width is probably changed co we can get new width
          // and adjust the width of other elements on the page
          //var gwdth = this.jqGrid("getGridParam","width");
          //this.jqGrid("setGridWidth",gwdth);
      } else {
          // we can do some action in case of "Cancel" button clicked
      }
   }
});
1004lucifer
사용된 jQuery UI 위젯 및 기타 플러그인
 - jQuery UI core
 - jQuery UI sortable widget
 - jQuery UI dialog
 - jQuery multiselect plugin

jQuery multiselect 플러그인은 링크 에서 볼 수 있으며, 또한 이 플러그인은 jqGrid 빌드의 plugins 디렉토리에 포함되어 있다.







정렬 가능한 행(Rows)

 - 이 메소드를 사용하면 마우스를 사용하여 시각적으로 그리드를 재정렬(정렬) 할 수 있다.

old_API
jQuery("#list").sortableRows(options);
new_API
jQuery("#list").jqGrid('sortableRows', options);
options - sortable 위젯의 옵션 (http://jqueryui.com/sortable/)

이 메소드는 jQuery UI sortable 위젯과 완벽하게 호환된다.
즉, 이 위젯에서 사용할 수 있는 옵션 및 이벤트를 설정할 수 있다.


사용된 jQuery UI 위젯 및 기타 플러그인
 - jQuery UI core
 - jQuery UI sortable widget

알려진 문제
 - 현재 이 방법은 sortable 위젯의 문제로 인해 FireFox v3.0.x, Chrome, Safari 브라우저에서 작동하지 않으며 추후 jQuery UI의 다음 버전에서 수정되길 바란다.
 - treeGrid가 활성화된 경우 메소드가 작동하지 않음 - (트리의 row를 재정렬 할 수 없음)









그리드 리사이즈

 - 이 메소드를 사용하면 마우스를 사용하여 그리드 너비/높이를 조정할 수 있다.

old_API
jQuery("#list").gridResize(options);
new_API
jQuery("#list").jqGrid('gridResize', options);
options - resizable 위젯의 옵션 (http://jqueryui.com/resizable/)

이 메소드는 jQuery UI resizable 위젯과 완벽하게 호환된다.
즉, 이 위젯에서 사용할 수 있는 옵션 및 이벤트를 설정할 수 있다.

사용된 jQuery UI 위젯 및 기타 플러그인
 - jQuery UI core
 - jQuery UI resizable widget

알려진 문제
 - 그리드 숨기기 버튼(캡션의 버튼)을 사용시 resizable 위젯에서 생성한 컨텐츠가 숨겨지지 않는다. 이로인해 숨겨진 이후에 그리드의 테두리(border)가 나타난다.








그리드 사이의 행(rows) 드래그앤드롭

 - 이 방법을 사용하면 마우스를 사용하여 두개 이상의 그리드 간에 행을 끌어다 놓을 수 있다.

old_API
jQuery("#list").gridDnD(options);
new_API
jQuery("#list").jqGrid('gridDnD', options);
options - 아래 나열된 속성을 가진 객체 (하단 옵션 설명 참고)


옵션
1004lucifer
Name Type Description Default
connectWith string row를 드래그 할 그리드를 지정한다.
두개 이상의 그리드가 있는경우 콤마로 구분한다.
ex) '#grid1,#grid2'
empty string
onstart function 이 이벤트는 원본 그리드에서 row를 끌기 시작할 때 발생한다.
이 이벤트에 이벤트핸들러, (준비된)ui object 가 매개변수로 전달된다.
자세한 내용은 jQuery UI draggable events
null
onstop function 이 이벤트는 드래그가 중지되면 호출된다.
이 이벤트에 이벤트핸들러, (준비된)ui object 가 매개변수로 전달된다.
자세한 내용은 jQuery UI draggable events
null
beforedrop function 이 이벤트는 connectWith 에 기술한 그리드에 row drop 전에 발생한다.
이 이벤트에 다음과 같은 파라메터가 전달된다.
1. event handler
2. (준비된)ui object,
3. data (그리드에 삽입된 name:value)
4. source grid object
5. target grid object

name:value 쌍의 객체를 반환 시 타겟 그리드에 추가된다.
null
ondrop function 이 이벤트는 connectWith 에 기술한 그리드에 row drop 후에 발생한다.
이 이벤트에 다음과 같은 파라메터가 전달된다.
1. event handler
2. (준비된)ui object,
3. data (그리드에 삽입된 name:value)
자세한 내용은 jQuery UI droppable events
null
drop_opts object drop 가능한 그리드에 적용 가능한 미리정의된 옵션 (위의 connectWith 옵션으로 지정됨)
또한 임의의 옵션 및 이벤트를 설정할 수 있다. (ondrop 이벤트로 대체되는 drop 이벤트 제외)
자세한 내용은 jQuery UI droppable
{ activeClass : “ui-state-active”,
hoverClass : “ui-state-hover”
}
drag_opts object drag 가능한 그리드에 적용 가능한 미리 정의된 옵션 (이 방법이 적용되는 옵션)
또한 임의의 옵션 및 이벤트를 설정할 수 있다.
(onstart, onstop 이벤트로 대체되는 start, stop 이벤트 제외)
자세한 내용은 jQuery UI draggable
{ revert: “invalid”,
helper: “clone”,
cursor: “move”,
appendTo : “#jqgrid_dnd”,
zIndex: 5000
}
dropbyname boolean true 설정 시 name이 같은 필드만 타겟 그리드에 추가할 수 있다.
addRowData를 사용하여 새로운 row를 삽입하며, name이 a인 필드가 소스그리드에 숨겨져있으면 다생 그리드에 표시될 수 있다.
기본값인 false는 소스의 첫번째 컬럼의 계산된 대상에 추가됨을 의미한다.
false
droppos string 새로운 row를 추가할 위치를 결정한다.
first - 그리드의 첫번째 row
last - 그리드의 마지막 row
first
autoid boolean 이 옵션은 새로운 row의 id를 생성하는 방법을 정의한다.
true 설정 시 autoidprefix 옵션으로 설정된 문자열로 시작하는 랜덤 숫자값 id 를 생성한다.
false 설정 시 id는 colModel의 key 속성에 의해 결정되는 다음 레코드 수 또는 값이 될 수 있다.
함수로 정의되는 경우 이 함수는 타겟 그리드에 id로 들어갈 값을 반환해야 하며, 이 경우 전달되는 파라메터는 타겟 그리드 row에 삽입될 데이터 배열이다.
true
autoidprefix string autoid 옵션이 true로 설정된 경우에만 id의 접두사로 결정되어 사용된다. dnd_
dragcopy boolean 소스 row를 이동시키지 않고 복사를 한다.
(GridDnD 에만 해당)
false

사용된 jQuery UI 위젯 및 기타 플러그인
 - jQuery UI core
 - jQuery UI draggable widget
 - jQuery UI droppable widget

알려진 문제
 - 이 방법은 Draggable 위젯의 버그로 Safari, Chrome 에서 제대로 작동하지 않는다. 드래그 가능한 row의 앞에 텍스트가 선택되는 효과

예제
 - 아래 예제는 id grid1, grid2, grid3 3개의 그리드를 생성 후 grid1 은 grid2, grid3으로 드래그 할 수 있고, grid2는 grid1 에서만 드래그 할 수 있다.
// Creating grid1
jQuery("#grid1").jqGrid({
    datatype: "local",
    height: 100,
    colNames: ['Id1', 'Name1', 'Values1'],
    colModel: [
       {name: 'id1', index: 'id',width: 100}, 
       {name: 'name1',index: 'name',width: 100},
       {name: 'values1',index: 'values',width: 200}
    ],
    caption: 'Grid 1',
    pager: '#pgrid1'
});
 
//Creating grid2
jQuery("#grid2").jqGrid({
    datatype: "local",
    height: 100,
    colNames: ['Id2', 'Name2', 'Values2'],
    colModel: [
       {name: 'id2',index: 'id',width: 100},
       {name: 'name2',index: 'name',width: 100},
       {name: 'values2',index: 'values',width: 200}
    }],
    caption: 'Grid 2',
    pager: '#pgrid2'
});
// Creating grid3
jQuery("#grid3").jqGrid({
    datatype: "local",
    height: 'auto',
    colNames: ['Id3', 'Name3', 'Values3'],
    colModel: [
       {name: 'id3',index: 'id',width: 100},
       {name: 'name3',index: 'name', width: 100},
       {name: 'values3',index: 'values',width: 200}
    }],
    caption: 'Grid 3',
    pager: '#pgrid3'
});
 
// Data for grid1
var mydata1 = [
    {id1:"1",name1:"test1",values1:'One'},
    {id1:"2",name1:"test2",values1:'Two'},
    {id1:"3",name1:"test3",values1:'Three'}
];
// Data for grid2
var mydata2 = [
    {id2:"11",name2:"test11",values2:'One1'},
    {id2:"21",name2:"test21",values2:'Two1'},
    {id2:"31",name2:"test31",values2:'Three1'}
];
// Data for grid3
var mydata3 = [
    {id3:"12",name3:"test12",values3:'One2'},
    {id3:"22",name3:"test22",values3:'Two2'},
    {id3:"32",name3:"test32",values3:'Three2'}
];
// Adding grid data
for (var i = 0; i <= mydata1.length; i++) {
    jQuery("#grid1").jqGrid('addRowData',i + 1, mydata1[i]);
    jQuery("#grid2").jqGrid('addRowData',i + 1, mydata2[i]);
    jQuery("#grid3").jqGrid('addRowData',i + 1, mydata3[i]);
}
// connect grid1 with grid2 and grid3
jQuery("#grid1").jqGrid('gridDnD',{connectWith:'#grid2,#grid3'});
// connect grid2 with grid1
jQuery("#grid2").jqGrid('gridDnD',{connectWith:'#grid1'});





참고
 -http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jquery_ui_methods

댓글