Type이 Enum이나 Radio 인 열(Column)들 간에 연관성을 통해, 대분류/중분류/소분류와 같은 관계형 콤보를 설정하는 방법입니다.
대분류(혹은 최상위)에 해당하는 열은 Related를 설정할 필요가 없고, 중분류 열에는 대분류 열의 이름(Name)을, 소분류 열에는 중분류 열 이름(Name)을 설정합니다.
샘플페이지 > 컬럼 유형과 기능 > 관계형 콤보 에서 예제 확인 가능합니다.
아래 샘플은 공통코드 테이블의 구조가 자신의 id와 parent id로 구성된 것을 가정하여, json으로 가져온 데이터로 대분류/중분류/소분류 리스트 내용을 추가하는 예제입니다.
onRenderFirstFinish 이벤트에서 조회 전에 Enum, EnumKeys 내용을 추가하는 방법
onRenderFirstFinish:function(evt){ //대분류 //조회전에 Enum,EnumKeys 내용을 추가합니다. evt.sheet.setAttribute( null, "Category1", "Enum", enumData.filter((v)=>!v.pid).reduce((a,c)=>"|"+c.value+a , "" ) ); evt.sheet.setAttribute( null, "Category1", "EnumKeys", enumData.filter((v)=>!v.pid).reduce((a,c)=>"|"+c.id+a , "" ) ); //중분류 //대분류 EnumKeys을 기준으로 item을 추가합니다. const cat1EnumKeys = evt.sheet.getAttribute(null, "Category1","EnumKeys").split("|").splice(1); let cat2EnumKeys = []; for(let i=0;i<cat1EnumKeys.length;i++){ let tempKeys = enumData.filter((v)=>v.pid==cat1EnumKeys[i]); evt.sheet.setAttribute(null, "Category2", "Enum"+cat1EnumKeys[i], enumData.filter((v)=>v.pid==cat1EnumKeys[i]).reduce((a,c)=>"|"+c.value+a, "")); evt.sheet.setAttribute(null, "Category2", "EnumKeys"+cat1EnumKeys[i], tempKeys.reduce((a,c)=>"|"+c.id+a, "")); //중분류의 EnumKeys를 모아둡니다. cat2EnumKeys.push(...(tempKeys.map(v=>v.id))); } //소분류 //중분류 EnumKeys를 기준으로 item을 추가합니다. for(let i=0;i<cat2EnumKeys.length;i++){ let tempKeys = enumData.filter((v)=>v.pid==cat2EnumKeys[i]); evt.sheet.setAttribute(null, "Category3", "Enum"+cat2EnumKeys[i], enumData.filter((v)=>v.pid==cat2EnumKeys[i]).reduce((a,c)=>"|"+c.value+a, "")); evt.sheet.setAttribute(null, "Category3", "EnumKeys"+cat2EnumKeys[i], tempKeys.reduce((a,c)=>"|"+c.id+a, "")); } evt.sheet.loadSearchData(ib.data); }
예제) https://jsfiddle.net/45wm07vj/