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]]});
};
});
});
};
}
RealGrid HELP