실습 jqGrid 버전: CDN 제공하는 v4.6 버전으로 테스트
공통 편집 속성
- grid.common.js 로딩되어야 사용 가능
- 그리드에 데이터를 표시하는 주요 이유중 하나는 데이터를 빠르고 쉽게 편집하는 것이며, jqGrid는 아래의 3가지 방법으로 데이터 편집을 지원한다.
1. cell 편집: 그리드의 특정 cell을 편집
2. inline 편집: 같은 row에 있는 여러개의 cell을 편집
3. form 편집: 그리드 외부에서 편집할 form을 작성
옵션 및 설명
1004lucifer
- 모든 편집 모듈은 편집을 수행하기위해 colModel의 공통 속성을 사용하며, 다음과 같은 속성 목록이 있다.
1. editable
2. edittype
3. editoptions
4. editrules
5. formoptions (form 편집에만 사용)
해당 옵션의 사용방법은 아래와 같다.
<script> jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', ..., editable:true, edittype:'text', editoptions:{...}, editrules:{...}, formoptions:{...} }, ... ] ... }); </script>
editable
- editable 옵션은 boolean 형식이며, 해당 필드의 편집여부를 결정한다. 기본값은 false이며, editable:true 설정 시 편집가능하게 설정된다.
- 숨겨진 필드는 편집 가능한 것으로 표시되도라도 편집할 수 없다.
- inline / cell 편집에서 필드를 편집하려면 showCol 메소드를 사용하여 필드를 표시해야 한다.
- form 편집에서는 editrules 옵션을 사용해야 한다.(아래 참조)
edittype
- edittype 옵션은 편집가능한 필드의 타입을 정의하며 사용 가능한 값은 'text', 'textarea', 'select', 'checkbox', 'password', 'button', 'image', 'file', 'custom' 이 있고, 기본값은 'text'이다.
text
- edittype이 text 일 때 jqGrid는 text유형의 태그를 생성한다.
<input type="text" ...../>
editoptions 에 해당 필드에 가능한 모든 옵션을 넣을 수 있다.... editoptions: {size:10, maxlength: 15}jqGrid가 아래와 같이 input을 구성해 준다.
<input type="text" size="10" maxlength="15" />
위 설정 외에도 jqGrid는 id, name 속성을 추가한다. <= 아래 다른 옵션 모두 공통1004lucifer
textarea
- edittype이 textarea이면 jqGrid는 textarea 유형의 input태그를 생성한다.
<input type="textarea" .../>
editoptions에 해당 유형의 속성을 추가할 수 있으며 일반적으로 상자크기를 설정한다.... editoptions: {rows:"2",cols:"10"}
<input type="textarea" rows="2" cols="10".../>
checkbox
- edittype이 checkbox 일때 jqGrid 는 아래와 같이 input 태그를 생성한다.
<input type="checkbox" .../>
editoptions에 checked / unchecked 값을 정의한다. (첫번째가 체크된값)...editoptions: { value:"Yes:No" }
<input type="checkbox" value="Yes" offval="No".../>
위와 같이 만들어지며, editoptions에 value 속성을 설정하지 않은경우 jqGrid는 checkbox를 구성하기 위해 (false | 0 | no | off | undefined) 값을 검색하며, 셀 내용에 이러한 값중 하나라도 포함되지 않으면 value 속성이 cell 내용이 되고 offval은 off로 설정된다.ex) cell 내용이 true 인경우
<input type="checkbox" value="true" offval="off" checked.../>
select
- edittype이 select 일때 jqGrid는 input 태그를 아래와 같이 생성한다.
<select> <option value='val1'> Value1 </option> <option value='val2'> Value2 </option> ... <option value='valn'> ValueN </option> </select>위 요소를 구성하기 위해 세가지 방법이 있다.
1. string으로 editoptions값 설정
- value:label 쌍으로된 값이 포함되어야 하며 value와 label은 콜론(:)으로 구분되어야 하며 쌍의 구분값은 세미콜론(;)이다. (주의: 마지막에는 세미콜론이 들어가지 않는다.)
ex) editoptions: { value: “FE:FedEx; IN:InTime; TN:TNT” }
<select> <option value='FE'> FedEx </option> <option value='IN'> InTime </option> <option value='TN'> TNT </option> </select>
2. editoptions 값을 객체로 설정하기
- 이경우 editoptions 값은 name:value 속성을 콤마(,)로 구분하여 배열{}를 구성해야 한다.
... colModel : [ ... {name:'myname', edittype:'select', editoptions:{value:{1:'One',2:'Two'}} }, ... ] ...
<select> <option value='1'>One</option> <option value='2'>Two</option> </select>
3. editoptions에 dataUrl 파라메터 설정하기
- edittype:select 경우에만 editoptions에 dataUrl 파라메터를 사용할 수 있으며, dataUrl 파라메터는 html select Element를 가져올 URL을 나타낸다.
이 옵션이 설정되면 Ajax를 통해 가져온 값으로 내용이 채워지며 유효한 HTML select Element 이어야 한다.
<select> <option value='1'>One</option> <option value='2'>Two</option> ... </select>selectbox에 중복선택 옵션을 넣을 수 있으며 size옵션도 추가할 수 있다.
...editoptions: {multiple:true, size:3... }
password
- edittype이 password일 때 jqGrid는 다음과 같은 태그를 생성한다.
<input type="password" ...../>
editoptions를 아래와 같이 구성하면... editoptions: {size:10, maxlength: 8}다음과 같이 만들어진다.
<input type="password" size="10" maxlength="8" />
button
- edittype이 button일때 jqGrid는 아래와 같이 태그를 생성한다.
<input type="button" ...../>
editoptions 아래와 같이 설정 시... editoptions: {value:'MyButton'}다음과 같이 만들어 준다.
<input type="button" value="MyButton" />
image
- edittype이 image일때 jqGrid는 아래와 같이 태그를 생성한다.
<input type="image" ...../>
editoptions 아래와 같이 설정 시... editoptions: {src:'path_to_my_image'}다음과 같이 만들어준다.
<input type="image" src="path_to_my_image" />
1004lucifer
file
- edittype이 file 일때 jqGrid는 아래와 같이 태그를 생성한다.
<input type="file" ...../>
editoptions 아래와 같이 설정 시... editoptions: {alt:'Alt text'}다음과 같이 만들어준다.
<input type="file" alt="Alt text"... />
(대개 form 편집에서) 위 요소가 작성되면 파일을 업로드 하기위한 enctype="multipart/form-data" 가 적용되지 않으며, 이 목적을 위해서는 다른 플러그인을 적용해야 한다. Ajax File Upload 플러그인이 정상적으로 작동한다.
custom
- 사용자정의 편집 Element를 위해 이 타입을 사용할 수 있고, 해당 Element를 만들고 서버에 form값을 보낼 get/set 을 위한 2개의 function(custom_element / custom_value)을 제공해야 한다.
custom Element가 새성되면 자동으로 다음과 같은 추가작업을 수행한다.
1) class 속성에 'customelement' 값 추가
2) name 속성에 colModel의 name을 추가
3) id 속성에 모든 편집모듈의 규칙에 따라 추가
1004lucifer
ex)
<script> function myelem (value, options) { var el = document.createElement("input"); el.type="text"; el.value = value; return el; } function myvalue(elem, operation, value) { if(operation === 'get') { return $(elem).val(); } else if(operation === 'set') { $('input',elem).val(value); } } jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', ..., editable:true, edittype:'custom', editoptions:{custom_element: myelem, custom_value:myvalue} }, ... ] ... }); </script>
editoptions
- editoptions는 편집열에 대한 정보가 들어있는 배열이며 edittype에서 선택한 값에따라 유효한 속성을 설정해야 한다.
<script> jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', ..., editoptions:{name1:value1...}, editable:true }, ... ] ... }); </script>1004lucifer
Property | Type | Description |
---|---|---|
value | mixed | edittype:checkbox 경우 - editoptions:{value:“Yes:No”} edittype:select 경우 1) string - editoptions:{value:“1:One;2:Two”} 2) object - editoptions:{value:{1:'One';2:'Two'}} 3) function - 형식화된 string or object 를 반환 edittype이 다른형식인경우 해당 정의된 요소의 value 값으로 지정됨 |
dataUrl | string | edittype:select 인 경우에만 사용가능 Ajax를 통해 select 요소를 가져올 URL. ex) <select><option value='1'>One</option>…</select> inline/cell/form 편집에서 새로운 row/cell의 편집이나 form이 구성될때 매번 호출된다. |
buildSelect | function | dataUrl 파라메터가 설정된 경우에만 사용가능 dataUrl 응답이 select Element를 만들 수 없는경우 이 함수를 사용하게되며 select, options 값을 포함하는 문자열을 반환해야 한다. 이 함수에 전달되는 매개변수는 서버의 응답값이다. |
dataInit | function | 이 함수가 정의되면 해당 element object가 함수에 전달된다. element가 생성될 때 한번만 호출된다. Example : …editoptions: { dataInit : function (elem) { $(elem).autocomplete(); }} inline/cell/form 편집에서 새로운 row/cell의 편집이나 form이 구성될때 매번 호출된다. form 편집에 한해서 recreateForm 옵션이 false면 한번만 수행되며 true설정 시 매번호출된다. |
dataEvents | array | data요소에 적용될 이벤트목록. $(“#id”).bind(type, [data], fn) 방법으로 data요소에 이벤트를 바인딩한다. 아래와 같이 기술한다. … editoptions: { dataEvents: [ { type: 'click', data: { i: 7 }, fn: function(e) { console.log(e.data.i); } }, { type: 'keypress', fn: function(e) { console.log('keypress'); } } ]} |
defaultValue | mixed | 이 옵션은 string이나 function이며, add모드의 editGridRow메소드를 사용할 때 Form편집 모듈에서만 사용이 가능하다. input Element에서 값이 비어있는 경우를 정의. select Element에서 키가아닌 text형식을 제공해야한다. 함수 사용시 함수는 값을 반환해야 한다. |
NullIfEmpty | boolean | true로 설정 시 해당 필드가 비어있을 때 null 문자열이 서버로 전송된다. |
custom_element | function | edittype:custom 경우에만 사용가능 이 함수는 Element를 만드는데 사용되며, DOM element를 반환해야 한다. 이 함수에 전달되는 매개변수는 colModel의 editoptions값이 전달된다. |
custom_value | function | edittype:custom 경우에만 사용가능 이 함수는 서버에 전달할 element에서 편집 이후의 값을 반환해야 한다. 함수에 전달되는 매개변수는 다음과 같다. 1) element object 2) inline/cell편집모듈의 operation타입(string형식) form편집에서 이 함수는 다른 동작을 하며 추가로 3번째 매개변수로 값을 전달한다. 두번째 매개변수 operation 타입이 아래와 같은경우 - get: 서버에 요청할 데이터, 이경우 값을 반환해야 하며 값을 반환하지 않으면 에러가 발생한다. - set: 서버에서 받아온 값을 그리드에 설정한다. (위의 예를 참고) |
other options | mixed | 이경우 Element에 유효한 다른 속성을 설정할 수 있다. ex) edittype:text 인경우 size, maxlength 등등.. |
편집 규칙
- 편집가능한 요소에 colModel에 속성을 추가하며, 대부분 값을 서버에 보내기전에 사용자 입력의 유효성 검사하는데 사용된다.
<script> jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', ..., editrules:{edithidden:true, required:true....}, editable:true }, ... ] ... }); </script>
Option | Type | Description |
---|---|---|
edithidden | boolean | form 편집모듈에서만 사용가능 기본적으로 숨겨진필드는 편집할수 없지만, edithidden옵션을 true로 설정 시 add / edit 메소드를 호출 시 필드를 편집할 수 있다. |
required | boolean | true 설정 시 비어있으면 오류메시지 표시 |
number | boolean | true 설정 시 숫자가 아닌경우 오류메시지 표시 |
integer | boolean | true 설정 시 정수가 아닌경우 오류메시지 표시 |
minValue | number(integer) | 설정 시 값이 이보다 작으면 오류메시지 표시 |
maxValue | number(integer) | 설정 시 값이 이보다 크면 오류메시지 표시 |
boolean | true 설정 시 이메일형식이 아니면 오류메시지 표시 | |
url | boolean | true 설정 시 url형식이 아니면 오류메시지 표시 |
date | boolean | true 설정 시 날짜형식이 아니면 오류메시지 표시 (datefmt옵션의 값은 get, 설정되지 않은경우 ISO날짜가 사용됨) |
time | boolean | true 설정 시 시간형식이 아니면 오류메시지 표시 현재 hh:mm 형식에 마지막에 옵션으로 am/pm 지원 |
custom | boolean | true 설정 시 custom_func함수를 통해 검사규칙 정의 |
custom_func | function | custom 옵션이 true인 경우에만 사용가능 이 함수에 전달되는 매개변수는 체크할 값과 colModel의 이름이며, 아래의 매개변수 배열을 반환해야 한다. 1) 값의 검사 성공여부 (true or false) 2) 값의 검사가 false인경우 보여질 오류메시지 ex) [false,“Please enter valid value”] |
custom 검사 예제
<script> function mypricecheck(value, colname) { if (value < 0 || value >20) return [false,"Please enter value between 0 and 20"]; else return [true,""]; } jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', ..., editrules:{custom:true, custom_func:mypricecheck....}, editable:true }, ... ] ... }); </script>
formoptions
- 이 옵션은 form편집에만 사용가능하며, form의 element를 재정렬과 편집할 element 앞뒤에 정보를 추가할 수 있다.
<script> jQuery("#grid_id").jqGrid({ ... colModel: [ ... {name:'price', ..., formoptions:{elmprefix:'(*)', rowpos:1, colpos:2....}, editable:true }, ... ] ... }); </script>1004lucifer
Option | Type | Description |
---|---|---|
elmprefix | string | 설정 시 입력요소 앞에 text or html 콘텐츠가 표시된다. |
elmsuffix | string | 설정 시 입력요소 뒤에 text or html 콘텐츠가 표시된다. |
label | string | 설정 시 formd의 label이 colName 배열의 name으로 변경되어 보여진다. |
rowpos | number | text-label을 가지고있는 element의 row위치를 결정 카운트는 1부터 시작 |
colpos | number | text-label을 가지고있는 element의 column위치를 결정 카운트는 1부터 시작 |
- rowpos, colpos 속성과 함께 colModel에서 formoptions를 사용하려는경우 모든 편집필드에서 이러한 속성을 사용하는것을 권장한다.
- 두개의 element는 동일한 row위치를 가질 수 있지만 column위치는 달라야 한다.
참고
- http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules
댓글
댓글 쓰기