아래처럼 main그리드가 존재한다.
맨 오른쪽 버튼을 누를 때, 그 행에 대한 서브그리드가 나타나도록 할 것이다.
이 것을 구현하고 실행해보면, 처음엔 아래에 서브그리드가 잘 나타나지만
다른 버튼을 누르면 동작하지 않는다.
그 이유는 jqGrid 특성상 그리드가 한번 그려지고 나면 더이상 새로 그려지지 않기 때문이다.
그래서 꼼수를 써야하는데, 방법은 아래와 같다.
(2번과 3번이 핵심)
1. main Grid의 complete 함수 추가
메인그리드가 다 그려지고 난 뒤,
서브그리드를 호출할 버튼을 만드는 것이다.
gridComplete:function(){ var ids = jQuery("#t").jqGrid('getDataIDs'); for(var i=0; i<ids.length; i++){ var id = ids[i]; btn = "<input name=\"btn\" style='height:22px; width:22px;' type='button' onclick=\"childGrid("+id+")\")\">"; jQuery("#t").jqgrid('setRowData', ids[i], {select:btn}); } } |
2. 템플릿 영역 (테이블)
<!-- 첫번째 테이블 --> <table id="t"></table> <div id="pager"></div> <br/><br/> <!-- 두번째 테이블 --> <div id="t1area"> <table id="t1"></table> </div> <div id="pager1"></div> |
동적으로 그려질 테이블 영역을 div로 한번 감싼다.
이미 한번 그려진 영역에는 Grid가 다시 그려지지 않으므로
div 속에 서브그리드를 넣고,
새로 그려야할 때 div에 있는 내용을 모두 비워버리고(empty함수), 다시 그리기 위함이다.
3. 서브그리드가 호출될 때
function childGrid(id){ $("#t1area").empty(); // 두번째 테이블을 감싸고있는 div의 내용을 비운다. var a = $("<table>").attr("id", "#t1"); // div(t1area) 안에 테이블을 새로 그리기 위함.. $("#t1area").append(a); a.jqGrid({ url:'/user/jsonMapper?id='+id, // id를 파라미터로 보내서 select문에서 id가 같은 데이터를 찾아온다 datatype:'json', rowNum:10, // 아래 내용은 생략! }); } |
'개발 > Javascript' 카테고리의 다른 글
[jQuery] Ajax의 흐름과 예제 (10) | 2013.06.14 |
---|---|
Flash 위에 게시판 올리는 법 (0) | 2013.04.30 |
jqGrid] 그리드 새로고침 하기 (0) | 2013.04.30 |
자바스크립트 함수 형태, 클래스처럼 쓰는 법 (0) | 2013.04.09 |
jQuery 탭 페이지 만들기 (1) | 2013.04.09 |