[jqGrid] Cell 편집 설명







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



Cell 편집

 - 셀 편집은 다음과 같은 동작을 통해 키 탐색 및 개별 셀 편집을 지원한다.

 1) 편집할 수 없는 셀을 클릭 시 셀이 선택되고 위/아래/왼쪽/오른쪽 키를 이용하여 셀을 탐색할 수 있다.
 2) 편집 가능한 셀로 이동하면 Enter 키를 눌러 셀을 편집할 수 있으며, 셀은 Enter/Tab 키를 누르거나 다른 셀을 클릭할 때 저장되고 ESC키를 누르면 셀이 저장되지 않는다. 셀을 편집할 때 키는 셀 내에서만 이동한다.
 3) 편집가능한 셀을 클릭하면 편집모드로 바로 변경된다.
 4) colModel에서 일부 필드의 편집가능 항목을 true로 설정할 수 있는 대신, class값에 'not-editable-cell' 이 있는경우 해당셀을 편집할 수 없다.

 - 이 모듈을 사용하려면 cell editing, common 모듈이 포함되어야 한다.





속성

 - 이 속성은 그리드 옵션에서 셀편집에 대한 속성들이다.
1004lucifer
PropertyTypeDescriptionDefault
cellEditboolean셀편집 여부
true 설정 시 onSelectRow 이벤트를 사용할 수 없으며, 마우스 hover를 사용할 수 없다.
false
cellsubmitstring셀의 내용이 저장되는 위치를 결정하며 'remote' 또는 'clientArray' 값을 가질 수 있다.

remote
 - 셀의 내용이 변경되면 즉시 cellurl로 ajax호출을 통해 값을 저장하며, rowid와 cell내용은 url에 추가된다.
 - mtype을 post로 셋팅하면 key, value 가 post로 보내진다.
 - 예를들어 mycell 을 저장하면 {id: rowid, mycell: cellvalue} 내용이 url에 추가된다.

clientArray
 - Ajax요청이 없으며 변경된 셀의 내용은 getChangedCells 메소드 또는 이벤트를 통해 얻을 수 있다.
remote
cellurlstringcellsubmit이 remote 일때만 사용가능
셀이 저장될 URL을 지정
null
ajaxCellOptionsobject이 옵션은 셀을 편집하여 서버에 Ajax호출 시 전역설정을 지정한다.
모든 현재 Ajax설정을 겹쳐쓸수 있으며 complete 이벤트를 포함한다.
empty object


예제
 - remote
{
 'cellEdit' : true,
 'cellsubmit' : 'remote',
 'cellurl' : '/url/to/handling/the/changed/cell/value'
}

- clientArray
{
 'cellEdit' : true,
 'cellsubmit' : 'clientArray'
}





이벤트

 - 그리드 옵션에서 사용할 수 있으며 셀편집과 관련된 이벤트이다.
 - 이벤트 중 상당수는 다음 매개변수를 사용한다.
  1) rowid: row의 id
  2) cellname: colModel에 등록된 cell의 name
  3) value: cell의 값
  4) iRow: row의 index (rowid와 같이쓰지 않는다.)
  5) iCol: column의 index

1004lucifer
EventParametersDescription
afterEditCellrowid,
cellname,
value,
iRow,
iCol
편집가능한 셀에만 적용
편집 후 이벤트가 호출된다.(즉 요소가 DOM에 삽입된 후 이벤트 발생)
afterRestoreCellrowid,
value,
iRow,
iCol
편집 가능한 셀에만 적용
restoreCell 메소드를 호출 후 발생하거나 사용자가 ESC키를 눌러 변경사항을 남겨둘 때 호출된다.
afterSaveCellrowid,
cellname,
value,
iRow,
iCol
편집 가능한 셀에만 적용
셀이 성공적으로 저장된 후 호출된다. (다른 컨텐츠를 변경하기에 좋다)
afterSubmitCellserverresponse,
rowid,
cellname,
value,
iRow,
iCol
편집 가능한 셀에만 적용
셀 및 기타 데이터가 서버에 요청/응답 후 호출된다.

[성공여부, 메시지] 형식을 반환해야 한다.
[true, ""] 의 경우에는 셀콘텐츠가 저장되었고 성공이라는 뜻이며
[false, "Error message"] 의 경우에는 셀콘텐츠가 저장되지 않았고 에러메시지가 대화상자에 보여진다.

serverresponse 는 서버의 응답값이다.
serverresponse.responseText 에 서버의 메시지가 포함되어 있다.
beforeEditCellrowid,
cellname,
value,
iRow,
iCol
편집 가능한 셀에만 적용
셀을 편집하게 전에 호출된다.
beforeSaveCellrowid,
cellname,
value,
iRow,
iCol
편집 가능한 셀에만 적용
값의 유효성을 검사하기전에 호출된다.
이 함수는 편집된 값을 대체할 수 있는 새로운 값을 반환한다.
beforeSaveCell : function(rowid,celname,value,iRow,iCol) {
  if( some_condition ){ return “new value”; }
}
beforeSubmitCellrowid,
cellname,
value,
iRow,
iCol
편집 가능한 셀에만 적용
cellsubmit: 'remote' 에만 적용됨

셀내용을 서버에 요청보내기전에 호출된다.
서버에 보낼 새로운 배열을 반환할 수 있다.
beforeSubmitCell : function(rowid,celname,value,iRow,iCol) {
  if( some_condition ) {
    return {name1:value1,name2:value2}
  } else { return {} }
}
반환된 배열을 서버에 보낼 cellurl에 추가한다.
errorCellserverresponse,
status
서버 오류가 있는경우 호출된다.
설정하지 않는경우 모달 대화상자가 나타난다.

serverresponse - 서버응답
serverresponse.responseText - 서버 메시지
status - 오류 상태
formatCellrowid,
cellname,
value,
iRow,
iCol
편집 가능한 셀에만 적용
편집전에 셀내용의 서식(format)을 지정하고 서식이 적용된 값을 리턴한다.
onSelectCellrowid,
celname,
value,
iRow,
iCol
편집할 수 없는 셀에만 적용
셀을 선택하면 호출된다.
serializeCellDatapostdata설정된경우 Ajax요청에 전달할 데이터를 직렬화 할 수 있으며, 이 함수는 직렬화된 데이터를 반환해야 한다.
이 이벤트는 서버에 사용자정의 데이터를 보내야 할때 사용할 수 있다.
ex) JSON string, XML string 등등





이벤트 호출 스택

 - cellSubmit 설정이 remote 또는 clientArray 로 설정된경우 아래와 같은 순서로 이벤트가 호출된다.

remote
 1. formatCell: 편집모드에서 사용될 셀값을 변경가능
 2. beforeEditCell: 셀이 편집모드로 변경되기 직전에 호출
 3. afterEditCell: 입력요소가 생성된 직후에 호출
 4. beforeSaveCell: 셀이 저장되기전에 호출, 여기에 값을 저장하여 서버에 전송가능
 5. beforeSubmitCell: 값이 서버에 보내지기전에 호출, 배열을 반환하여 Request에 파라메터 추가 할수 있음.
 6. afterSubmitCell: 셀 저장이 성공적인경우에 호출, 여기에 오류메시지를 반환하여 메시지가 있는 대화상자 표시 가능
 7. afterSaveCell: 셀 값이 저장될 때 호출
 8. errorCell: 서버 오류 발생할때 호출
 9. onSelectCell: 셀을 편집할 수 없을 때 호출


clientArray
 1. formatCell: 편집모드에서 사용될 셀값을 변경가능
 2. beforeEditCell: 셀이 편집모드로 변경되기 직전에 호출
 3. afterEditCell: 입력요소가 생성된 직후에 호출
 4. beforeSaveCell: 사용자가 셀을 저장하기전에 호출
 5. beforeSubmitCell: 여기에 값을 저장할 수 있음
 6. afterSaveCell: 셀의 값이 beforeSubmitCell에 의해 성공적으로 저장되면 호출
 7. onSelectCell: 셀을 편집할 수 없을 때 호출





메소드

 - 다음 메소드는 jqGrid 객체에 적용되어야 하며 모두 동일한 객체를 반환한다.
1004lucifer
MethodParametersDescription
editCelliRow,
iCol,
edit
iRow, iCol을 이용해 셀을 편집

iRow - row의 index (rowid와 혼합하지 마라)
iCol - column의 index
edit - false 설정 시 셀이 편집되지 않는다.
getChangedCellsmethod(기본값: 'all' string)
메소드에 따라 변경된 배열을 반환한다.

all - 변경된 모든 row들을 반환한다.
dirty - 변경된 셀과 row의 id를 반환한다.
restoreCelliRow,
iCol
iRow, iCol을 이용해 셀을 복원

iRow - row의 index (rowid와 혼합하지 마라)
iCol - column의 index
saveCelliRow,
iCol
iRow, iCol을 이용해 셀을 저장

iRow - row의 index (rowid와 혼합하지 마라)
iCol - column의 index





 데이터 구성방법
  - 셀이 편집되면서 input element가 생성되면 다음 규칙이 설정된다.
  1) 편집 가능한 cell element의 id 는 (row의 index) + (colModel의 name)
    주의: row의 index는 rowid와 다르다.
    ex) 20_myname: (index=20, colModels name=myname)
  2) 편집 가능한 cell element의 name은 colModel배열속성의 name으로 구성된다.

 서버에 전달되는 내용
  - 데이터가 서버에 전달될 때 다음을 포함하는 객체 {}가 생성된다.
  1) name:value - name은 셀에 표시된 input element의 name값
  2) id:rowid - rowid는 row의 id값
  3) beforeSubmitCell 이벤트에서 반환된 데이터가 있으면 데이터를 확장한다.







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

댓글