RealGrid2 가이드
편집기
리스트 동적 편집기

리스트 동적 편집기

lookupTree구조가 아닌 하나의 컬럼에서 dropdown목록을 동적으로 출력할 수 있습니다.

listCallback 적용

editor.listCallback 함수에 value와 label에 해당하는 값을 직접 채워서 동적으로 사용하거나 DB에서 가져온 값으로 반환 하면 원하는 목록의 값을 동적으로 리스트 출력이 가능합니다.
templateCallback에서는 listCallback에서 가져온 정보로 직접 화면에 출력할 이미지나 값을 가공해서 출력할 수 있습니다.

listCallback은 lookupDisplay가 적용되지 않기에 선택된 value값이 기본적으로 출력됩니다. 동적 리스트와 lookup이 필요하다면 lookupTree기능을 사용 해야합니다.

var columns = [{
    name: "Country",
    fieldName: "Country",
    width: "150",
    editButtonVisibility: "always",
    editor:{
        type: "list",
        listCallback: function(grid, index) {
          return {
            value: "value", // column.listData와 동일한 형태. value, label 속성은 생략가능.
            label: "label",  // 
            list: [ {value: "Korea", label: "한국", flag: "KR", country: "Korea", currency: "KRW"},
                    {value: "USA", label: "미국", flag: "US", country: "USA", currency: "USD"},
                    {value: "Brazil", label: "브라질", flag: "BR", country: "Brazil", currency: "BRL"},
                    {value: "Argentina", label: "아르헨티나", flag: "AR", country: "Argentina", currency: "ARS"},
                    {value: "China", label: "중국", flag: "CN", country: "China", currency: "CNY"},
                    {value: "Japan", label: "일본", flag: "JP", country: "Japan", currency: "JPY"}
            ]
          }
        },
        templateCallback: function(grid, index, div, value, label, item) {
            div.innerHTML = `<span style='width:100px'>value: ${value}</span>
                             <span style='width:100px'>, label: ${label}</span>`
        }
      },
    header: {
        text: "나라",
    }
  }
  ...
]
 
//값 변경 이벤트
gridView.onGetEditValue = (grid,index,result)=>{
    if (index.column === "Country" && result["item"]) {
        grid.setValue(index.itemIndex, "Currency", result["item"].currency);
        grid.setValue(index.itemIndex, "CountryCode", result["item"].flag);
    }
  }

labelField적용

value값이 아닌 label에 해당하는 값으로 그리드에출력되도록 적용하기 위해서는 labelField기능을 적용하고 labelField에 값을 세팅해야합니다.

//컬럼 설정, 라벨필드 적용
var columns = [{
    name: "Country",
    fieldName: "Country",
    width: "150",
    lookupDisplay: true,
    labelField: "labelField",
    editButtonVisibility: "always",
    editor:{
        type: "list",
        listCallback: function(grid, index) {
          return {
            value: "value", // column.listData와 동일한 형태. value, label 속성은 생략가능.
            label: "label",  // 
            list: [ {value: "Korea", label: "한국", flag: "KR", country: "Korea", currency: "KRW"},
                    {value: "USA", label: "미국", flag: "US", country: "USA", currency: "USD"},
                    {value: "Brazil", label: "브라질", flag: "BR", country: "Brazil", currency: "BRL"},
                    {value: "Argentina", label: "아르헨티나", flag: "AR", country: "Argentina", currency: "ARS"},
                    {value: "China", label: "중국", flag: "CN", country: "China", currency: "CNY"},
                    {value: "Japan", label: "일본", flag: "JP", country: "Japan", currency: "JPY"}
            ]
          }
        },
        templateCallback: function(grid, index, div, value, label, item) {
            div.innerHTML = `<span style='width:100px'>value: ${value}</span>
                             <span style='width:100px'>, label: ${label}</span>`
        }
      },
    header: {
        text: "나라",
    }
  },
  ...
]
 
//값 변경 시 라벨필드 값 적용
gridView.onGetEditValue = (grid,index,result)=>{
    if (index.column === "Country" && result["item"]) {
        grid.setValue(index.itemIndex, "Currency", result["item"].currency);
        grid.setValue(index.itemIndex, "CountryCode", result["item"].flag);
        grid.setValue(index.itemIndex, "labelField", result["item"].label);
    }
}
 
//조회 시 라벨필드 값채우기
dataProvider.setRows([
    {Country: "Korea", Currency: "KRW", CountryCode: "KR", labelField: "한국"},
    {Country: "USA", Currency: "USD", CountryCode: "US", labelField: "미국"},
    {Country: "Brazil", Currency: "BRL", CountryCode: "BR", labelField: "브라질"},
    {Country: "Argentina", Currency: "ARS", CountryCode: "AR", labelField: "아르헨티나"},
    {Country: "Korea", Currency: "KRW", CountryCode: "KR", labelField: "한국"},
    {Country: "USA", Currency: "USD", CountryCode: "US", labelField: "미국"},
    {Country: "Brazil", Currency: "BRL", CountryCode: "BR", labelField: "브라질"},
    {Country: "Argentina", Currency: "ARS", CountryCode: "AR", labelField: "아르헨티나"}
  ])