dropDown리스트가 동적으로 앞의 값에 따라서 변경되는 방법이 있나요?
Q.
dropDown리스트가 동적으로 앞의 값에 따라서 변경되는 방법이 있나요?
A.
예전에 자체 프로젝트에 사용했던 소스로 설명 드리겠습니다.
/** * 먼저 setLookups로 id(lookupTree를 사용할 컬럼에 지정), levels(선행조건 갯수+ 자신 컬럼 갯수를 * 지정),key(실제 data값),values(그리드에 보여지는 값)을 설정합니다. type1은 teamcode컬럼의 lookupTree에 * 사용되고 type2는 empcode컬럼의 lookupTree에 사용합니다. */ function setLookups(grid) { grid.setLookups([{ id: "type1", levels: 2, keys: [], values: [] }, { id: "type2", levels: 3, keys: [], values: [] }]); } /** * code컬럼은 values, labels를 지정한 dropDown 컬럼으로 설정합니다. */ function setColumns(grid) { var values1 =[], labels1=[]; var columns = [{ header : {text : "영업부서"}, fieldName : "code", lookupDisplay : true, values: values1, labels: labels1, editor : { type : "dropDown" } }, { header : {text : "영업팀"}, fieldName : "teamCode", lookupDisplay : true, lookupSourceId : "type1", lookupKeyFields : ["code", "teamCode"], editor : { type : "dropDown" } }, { header : {text : "영업사원"}, fieldName : "empCode", lookupDisplay : true, lookupSourceId : "type2", lookupKeyFields : ["code", "teamCode", "empCode"], editor : { type : "dropDown" } }]; $.post("/realgrid/product/dptCode.do",function(json){ $.each(json,function(k,v){ values1.push(v.code); labels1.push(v.name); }); grid.setColumns(columns); }; } /** * 본 예제는 Cell의 데이타가 변경되었을때 발생하는 이벤트 함수 GridView.onCellEdited를 사용하엿습니다. */ function onCellEditedMenu(grid, itemIndex, dataRow, field){ var fieldIndexCode = dataProvider.getFieldIndex("code"); var fieldIndexTeamCode = dataProvider.getFieldIndex("teamCode"); // 영업팀 // onCellEdited 가 발생한 필드가 첫번째 컬럼일때 두번째에 lookupTree를 생성합니다. if (field == fieldIndexCode){ var searchType1 = grid.getValue(itemIndex, fieldIndexCode); var fieldIndexTeamCode = dataProvider.getFieldIndex("teamCode"); var fieldIndexEmpCode = dataProvider.getFieldIndex("empCode"); var ajaxData = "&searchType1="+searchType1+"&searchType2="; // data를 db에서 가져온후 $.post("/realgrid/product/teamCode.do",ajaxData,function(json){ $.each(json, function(k,v){ // existsLookupData 함수를 이용해서 해당값이 없으면 if (!gridView.existsLookupData("type1", [searchType1, v.teamCode])) { // type1 에 fillLookupData 이용해서 트리 값을 채워줍니다. grid.fillLookupData("type1",{"rows" : [[searchType1, v.teamCode, v.teamName]]}); }; }); }); }; // 영업사원 // 아래는 2두번째 lookupTree 생성 방법입니다. if(field == fieldIndexTeamCode){ var searchType1 = grid.getValue(itemIndex, fieldIndexCode); var searchType2 = grid.getValue(itemIndex, fieldIndexTeamCode); var fieldIndexEmpCode = dataProvider.getFieldIndex("empCode"); var ajaxData = "&searchType1="+searchType1+"&searchType2="+searchType2; $.post("/realgrid/product/empCode.do",ajaxData,function(json){ $.each(json, function(k,v){ if (!gridView.existsLookupData("type2", [searchType1, searchType2, v.empCode])) { grid.fillLookupData("type2", { "rows" : [[searchType1, searchType2, v.empCode, v.empName]]}); }; }); }); }; }