🧐 FAQ
RealGridJS에서 RealGrid2로의 전환

RealGridJS에서 RealGrid2로의 전환

RealGrid2는 기본적으로 RealGridJS와 호환성을 유지하여 개발되었습니다.
기반 변경으로 인한 몇몇의 API제외한 모든 기능들을 그대로 사용하실 수 있습니다.

중요 변경 사항

RealGridJS는 Canvas기반의 그리드 였으나 RealGrid2는 DOM기반의 그리드로 개발되었습니다.
RealGridJS에서 사용하던 styles 관련 속성들은 CSS로 처리되게 변경 되었습니다.

변경 내용


필요 파일

RealGridJS

<script type="text/javascript" src="/scripts/realgridjs-lic.js"></script>
<script
  type="text/javascript"
  src="/scripts/realgridjs_eval.1.1.34.min.js"
></script>
<script type="text/javascript" src="/scripts/realgridjs-api.1.1.34.js"></script>
<script type="text/javascript" src="/scripts/jszip.min.js"></script>

RealGrid2

<link href="/public/realgrid.2.x.x/realgrid-style.css" rel="stylesheet" />
<script
  type="text/javascript"
  src="/public/realgrid.2.x.x/realgrid-lic.js"
></script>
<script
  type="text/javascript"
  src="/public/realgrid.2.x.x/realgrid.2.x.x.min.js"
></script>
<script
  type="text/javascript"
  src="/public/realgrid.2.x.x/libs/jszip.min.js"
></script>

그리드 생성

  • setRootContext()는 사용 안함.
  • RealGridJS -> RealGrid로 클래스명이 변경되었습니다.

RealGridJS

RealGridJS.setRootContext('/scripts/');
dataProvider = new RealGridJS.LocalDataProvider();
gridView = new RealGridJS.GridView(container);
gridView.setDataSource(dataProvider);
 
dataProvider.setFields([
  {
    fieldName: 'KorName',
    dataType: 'text',
  },
]);
gridView.setColumns([
  {
    name: 'KorName',
    fieldName: 'KorName',
    type: 'data',
    width: '60',
    header: {
      text: '이름',
    },
  },
]);

RealGrid2

dataProvider = new RealGrid.LocalDataProvider();
gridView = new RealGrid.GridView(container);
gridView.setDataSource(dataProvider);
 
dataProvider.setFields([
  {
    fieldName: 'KorName',
    dataType: 'text',
  },
]);
gridView.setColumns([
  {
    name: 'KorName',
    fieldName: 'KorName',
    type: 'data',
    width: '60',
    header: {
      text: '이름',
    },
  },
]);

column의 포맷 지정 위치 변경, 스타일 지정방법

  • styles가 없어졌으므로 prefix, suffix, datatimeFormat, numberFormat이 상위레벨로 위치가 변경되었습니다.
  • 셀 데이터의 textAlignment 및 색상 관련된 부분은 styleName 속성에서 CSS로 처리합니다.

텍스트렌더러를 참고하세요.

RealGridJS

var columns = [
  {
    name: 'Amount',
    fieldName: 'Amount',
    type: 'data',
    width: '50',
    styles: {
      numberFormat: '#,##0',
      textAlignment: 'far',
      suffix: ' 원',
      background: '#ffff0000',
    },
    header: {
      text: '금액',
    },
  },
  {
    name: 'StartDate',
    fieldName: 'StartDate',
    type: 'data',
    width: '100',
    styles: {
      datetimeFormat: 'yyyy-MM-dd',
    },
    header: {
      text: '최초납입일',
    },
  },
];

RealGrid2

.number-column {
  text-align: right;
  background: #ff0000;
}
var columns = [
  {
    name: 'Amount',
    fieldName: 'Amount',
    type: 'data',
    width: '50',
    numberFormat: '#,##0',
    suffix: ' 원',
    styleName: 'number-column',
    header: {
      text: '금액',
    },
  },
  {
    name: 'StartDate',
    fieldName: 'StartDate',
    type: 'data',
    width: '100',
    datetimeFormat: 'yyyy-MM-dd',
    header: {
      text: '최초납입일',
    },
  },
];

ColumnLayout(컬럼 그룹핑)

RealGridJS
컬럼 그룹핑 (opens in a new tab)를 참고하세요.

var columns = [
  {
    type: 'group',
    name: 'GroupIds',
    orientation: 'vertical',
    width: 90,
    columns: [
      {
        name: 'OrderID',
        fieldName: 'OrderID',
        width: 90,
        header: {
          text: 'Order',
        },
      },
      {
        name: 'CustomerID',
        fieldName: 'CustomerID',
        width: 90,
        header: {
          text: 'Customer ID',
        },
      },
    ],
  },
];
 
gridView.setColumns(columns);

RealGrid2
컬럼 레이아웃(컬럼 그룹핑)를 참고하세요.

var columns = [
  {
    name: 'OrderID',
    fieldName: 'OrderID',
    width: '90',
    header: {
      text: 'Order',
    },
  },
  {
    name: 'CustomerID',
    fieldName: 'CustomerID',
    width: '90',
    header: {
      text: 'Customer ID',
    },
  },
];
 
gridView.setColumns(columns);
 
var layout = [
  {
    name: 'GroupIds',
    direction: 'vertical',
    items: ['OrderID', 'CustomerID'],
  },
];
 
gridView.setColumnLayout(layout);

옵션

  • indicator의 명칭이 rowIndicator로 변경되었습니다.
  • panel의 명칭이 groupPanel로 변경되었습니다.
  • selectOptions이 displayOptions하위 속성으로 이동되었습니다.
  • footer의 경우 RealGrid2에서는 멀티풋터의 처리를 위해 footers가 새로 생겼습니다. 전체 footer의 설정은 footers를 통해 지정하고 각 개별 footer들은 footer에 지정합니다.
  • grid.options의 filterMode, sortMode, hideDeleteRows가 옵션으로 설정하는 것이 아닌 그리드 객체에 바로 설정하도록 변경되었습니다.

RealGridJS

gridView.setIndicator({ visible: false });
gridView.setPanel({ visible: false });
gridView.setSelectOptions({ style: 'block' });
gridView.setFooter({ visible: false });
 
gridView.setOptions({
  hideDeletedRows: true,
  sortMode: 'explicit',
  filterMode: 'explicit',
});

RealGrid2

gridView.rowIndicator.visible = false; //gridView.setRowIndicator({visible: false}); 사용가능
gridView.groupPanel.visible = false; //gridView.setGroupPanel({visible: false}); 사용가능
gridView.displayOptions.selectionStyle = 'block'; //gridView.setDisplayOptions({selectionStyle: "block"}); 사용가능
gridView.setFooters.visible = false;
 
gridView.hideDeletedRows = true;
gridView.sortMode = 'explicit';
gridView.filterMode = 'explicit';

행 그룹핑

  • 행 그룹핑 시 group Footer의 스타일 및 expression 지정하는 위치가 변경되었습니다.

RealGridJS

var columns = [
  {
    name: 'Amount',
    fieldName: 'Amount',
    width: '50',
    header: {
      text: '금액',
    },
    footer: {
      expression: 'sum',
      groupExpression: 'sum',
    },
  },
];

RealGrid2

var columns = [
  {
    name: 'Amount',
    fieldName: 'Amount',
    width: '50',
    header: {
      text: '금액',
    },
    footer: {
      expression: 'sum',
    },
    groupFooter: {
      expression: 'sum',
    },
  },
];

Dynamic Styles

  • RealGrid2에서는 사용하기 어려웠던 criteria 방법은 지원하지 않고 사용하기에 직관적인 function() 타입을 지원합니다.

Column Dynamic Styles

  • 지정한 하나의 컬럼에만 스타일을 동적으로 적용시키는 것을 컬럼 동적 스타일이라고 합니다.

RealGridJS
column.DynamicStyles (opens in a new tab)을 참고하세요.

var columns = [
  {
    name: 'col3',
    fieldName: 'field3',
    header: {
      text: '이름',
    },
    width: 80,
    dynamicStyles: function (grid, index, value) {
      var sum =
        grid.getValue(index.itemIndex, 'field4') +
        grid.getValue(index.itemIndex, 'field5') +
        grid.getValue(index.itemIndex, 'field6');
 
      var avg = sum / 3;
 
      if (avg >= 90) {
        return {
          background: '#ff0000',
        };
      }
    },
  },
];

RealGrid2
컬럼 동적 스타일을 참고하세요.

.red-column {
  background: #ff0000;
}
var columns = [
  {
    name: 'col3',
    fieldName: 'field3',
    header: {
      text: '이름',
    },
    width: 80,
    styleCallback: function (grid, dataCell) {
      var ret = {};
 
      var sum =
        grid.getValue(dataCell.index.itemIndex, 'field4') +
        grid.getValue(dataCell.index.itemIndex, 'field5') +
        grid.getValue(dataCell.index.itemIndex, 'field6');
 
      var avg = sum / 3;
 
      if (avg >= 90) {
        return (ret.styleName = 'red-column');
      }
    },
  },
];

Row(body) Dynamic Styles

  • 특정 조건에 따라 각 행마다 스타일을 지정하는 것을 행 동적 스타일이라고 합니다.
    RealGrid2에서는 styles 객체를 더 이상 사용하지 않기 때문에 setRowStyleCallback()을 사용하여 행 동적 스타일을 지정합니다.

RealGridJS
body.DynamicStyles (opens in a new tab)을 참고하세요.

gridView.setStyles({
  body: {
    dynamicStyles: function (grid, index) {
      var gender = grid.getValue(index.itemIndex, 'gender');
 
      if (gender == '배우') {
        return {
          background: '#FF00000',
        };
      }
    },
  },
});

RealGrid2
행 동적 스타일을 참고하세요.

.red-color {
  background: #ff0000;
}
gridView.setRowStyleCallback(function (grid, item, fixed) {
  var gender = grid.getValue(item.index, 'Gender');
 
  if (gender == '여') {
    return 'red-color';
  }
});

Cell Dynamic Styles

  • 특정 조건에 따라 전체 데이터셀 영역에서 특정 셀에 스타일을 지정하는 것을 셀 동적 스타일이라고 합니다.
    RealGrid2에서는 styles 객체를 더 이상 사용하지 않기 때문에 setCellStyleCallback()을 사용하여 셀 동적 스타일을 지정합니다.

RealGridJS
body.CellDynamicStyles (opens in a new tab)을 참고하세요.

gridView.setStyles({
  body:{
    cellDynamicStyles: function (grid, index, value) {
      var styles = {};
 
      if ((value == '여') or (value == '캐나다')) {
          styles.background = "#FF0000"
      }
 
      return styles;
    }
  }
});

RealGrid2

.red-color {
  background: #ff0000;
}
gridView.setCellStyleCallback(function(grid, dataCell) {
  var ret = {}
 
  if ((dataCell.value == '여') or (dataCell.value == '캐나다')){
    ret.styleName = 'red-color';
  }
 
  return ret;
})

렌더러


이미지 렌더러

RealGridJS

var columns = [
  {
    name: 'imageUrl',
    fieldName: 'imageUrl',
    type: 'data',
    width: '150',
    renderer: {
      type: 'image',
    },
    header: {
      text: 'Image URL',
    },
  },
];

RealGrid2

var columns = [
  {
    name: 'imageUrl',
    fieldName: 'imageUrl',
    type: 'data',
    width: '150',
    renderer: {
      type: 'image',
      imageField: 'imageUrl',
    },
    header: {
      text: 'Image URL',
    },
  },
];

아이콘 렌더러

RealGridJS

http://demo.realgrid.com/Renderer/IconCellRenderer/ (opens in a new tab)

var imgs = new RealGridJS.ImageList('images1', '/resource/image/icon/');
imgs.addUrls(['man.png', 'woman.png']);
 
gridView.registerImageList(imgs);
 
var columns = [
  {
    name: 'icon1',
    fieldName: 'Gender',
    width: '100',
    renderer: {
      type: 'icon',
    },
    header: {
      text: 'Icon Map',
    },
    imageList: imgs,
    styles: {
      textAlignment: 'near',
      iconLocation: 'left',
      iconAlignment: 'center',
      iconOffset: 4,
      iconPadding: 4,
    },
    dynamicStyles: [
      {
        criteria: "value='남'",
        styles: 'iconIndex=0',
      },
      {
        criteria: "value='여'",
        styles: 'iconIndex=1',
      },
    ],
  },
];

RealGrid2

https://docs.realgrid.com/guides/renderer/icon-renderer

var columns = [
  {
    name: 'icon1',
    fieldName: 'Gender',
    width: '100',
    renderer: {
      type: 'icon',
      iconMap: {
: '/resource/image/icon/man.png',
: '/resource/image/icon/woman.png',
      },
      iconHeight: 15,
      iconWidth: 10,
    },
    header: {
      text: 'Icon Map',
    },
  },
];

도형 렌더러

RealGridJS

http://demo.realgrid.com/Renderer/ShapeCellRenderer (opens in a new tab)

RealGrid2

https://docs.realgrid.com/guides/renderer/shape-renderer


링크 렌더러

RealGridJS

http://demo.realgrid.com/Renderer/LinkCellRenderer/ (opens in a new tab)

gridView.onLinkableCellClicked = function (grid, index, url) {
  window.open(url, '_newtab');
};
 
var columns = [
  {
    name: 'Address',
    fieldName: 'Address',
    width: '200',
    renderer: {
      type: 'link',
      url: 'https://www.google.com/maps/place/${Address}',
      requiredFields: 'Address',
      showUrl: true,
    },
    header: {
      text: '주소',
    },
    styleName: 'left-column',
  },
];

RealGrid2

https://docs.realgrid.com/guides/renderer/link-renderer

var columns = [
  {
    name: 'Address',
    fieldName: 'Address',
    width: '200',
    renderer: {
      type: 'link',
      urlCallback: function (grid, cell) {
        return 'https://www.google.com/maps/place/' + cell.value;
      },
      titleField: 'Address',
    },
    header: {
      text: '주소',
    },
    styleName: 'left-column',
  },
];

이미지 버튼 렌더러(멀티아이콘, 멀티버튼)

  • RealGridJS의 멀티아이콘 멀티버튼의 경우 커스텀 렌더러로 구현해야 합니다.

RealGridJS

http://demo.realgrid.com/Renderer/multiIconCellRenderer/ (opens in a new tab)

http://demo.realgrid.com/CellComponent/CellButton/ (opens in a new tab)

RealGrid2

https://docs.realgrid.com/guides/renderer/custom-renderer-img-buttons


클릭 이벤트

  • RealGridJS에서는 각 영역에 대한 클릭 이벤트들이 별도로 존재하였으나 RealGrid2에서는 많이 부분들이 통합되었습니다.
    아래 링크에서 차이점을 확인하세요.

RealGridJS

http://demo.realgrid.com/Event/RegionEvents/ (opens in a new tab)

RealGrid2

https://docs.realgrid.com/guides/events/click-event (opens in a new tab)

컬럼 너비 동적 변경

RealGridJS

gridView.setColumnProperty('colName', 'displayWidth', 100);
 
var column = gridView.columnByName('colName');
column.displayWidth = 100;
gridView.setColumn(column);

RealGrid2

gridView.layoutByColumn('colName').cellWidth = 100;

API

RealGridJSRealGrid2
setPanel(), getPanel()setGroupPanel(), getGroupPanel()
setIndicator(), getIndicator()setRowIndicator(), getRowIndicator()
setSelectOptions({style: "block"})displayOptions.selectStyle = "block"
setFooter.countsetFooters() 추가
EdgeMarkdisplayOptions.showChangeMarker
fitRowHeightAll()displayOptions.rowHeight = 0 변경
rowFocusOption, rowFocusVisible, rowFocusMask제거, rowFocusType 통합
addCellStyle(), setCellStyle(), setCellStyles()제거, styleCallback들을 사용하여 처리
getCellStyle(), getStyles(), getCellApplyStyles()제거
clearCellStyles()제거
renderer.type = "imageButton"renderer.type = "button"
addImageList, registerImageList제거, renderer.iconMap 직접 경로 사용
checkValidateCells()validateCells()
getInvalidCellList()validateCells()
updateStrictRow()제거, updateRow()를 사용하여 처리
subTexttemplate으로 대체
field.calculateExpression, field.calculateCallbackfield.valueExpression, field.valueCallback
column.displayRegExp, column.displayReplacecolumn.textFormat으로 통합
treeProvider.fillJsonData()treeProvider.setObjectRows()
onContextMenuPopup(grid, x, y, elementName)onContextMenuPopup(grid, x, y, clickData)
onContextMenuItemClicked(grid, data, index)onContextMenuItemClicked(grid, item, clickData)
onMenuItemClicked(grid, data, index)onMenuItemClicked(grid, item, clickData)
onGroupingChanged(grid)onGrouped(grid)
onTopItemIndexChangedonTopIndexChanged
onLinkableCellClickedrenderer.urlCallback 처리
addCellRenderers제거, html renderer 또는 customRenderer 로 구현

※ 문서에 포함되지 않는 설명 및 기능은 게시판 또는 기술지원팀으로 문의해주시기 바랍니다.