RealGrid2 가이드
Tip
체크바와 관계된 팁

체크바와 관계된 팁

체크바에 체크를 한 경우 행의 색을 지정하는 예제 입니다.

  gridView.setRowStyleCallback(function(grid, item, fixed) {
    if (item.checked) {
      return 'orange-color'
    }
  })

체크바에 체크한 행들의 정보를 가져오는 예제 입니다.

  var rowDatas = [];
  var rows = gridView.getCheckedRows();
 
  for (var i in rows) {
    var data = dataProvider.getJsonRow(rows[i]);
    rowDatas.push(data);
  }
 
  alert(JSON.stringify(rowDatas));

체크바에 체크한 행들을 삭제하는 예제 입니다.

아래 예제는 행 상태만 deleted 변경해주지만 실제로 그리드에서도 삭제되길 원한다면 아래와 같이 설정하면 됩니다.

  dataProvider.softDeleting = true;
  //체크된 행 가져오기
  var rows = gridView.getCheckedRows();
  //행 삭제하기
  dataProvider.removeRows(rows);
  //체크 해제하기
  gridView.checkRows(rows, false);

자식노드의 선택 여부에 따른 그룹 헤더 체크 예제 입니다.

그리드뷰 그룹핑 예제

아래 예제는 행 상태만 deleted 변경해주지만 실제로 그리드에서도 삭제되길 원한다면 아래와 같이 설정하면 됩니다.

  gridView.checkBar.headThreeStates = true
  gridView.checkBar.showGroupFooter = false
 gridView.onItemChecked = (grid, itemIndex, checked) => {
    const model = grid.getModel(itemIndex)
    grid.getDescendantModels(model)?.forEach((model) => grid.checkModel(model, checked, false, false))
 
    let p = grid.getModel(model.itemIndex)
 
    while ((p = grid.getParentModel(p, true))) {
      let checkCnt = 0
      let indeterminateCnt = 0
      const children = grid.getChildModels(p, true).filter(model => {
        if (model.type !== "footer") {
          return model;
        }
      })
 
      for (const child of children) {
        grid.isCheckedModel(child) && checkCnt++
        grid.isIndeterminateModel(child) && indeterminateCnt++
      }
 
      if (checkCnt === 0) { 
        // 전체 체크 안됨.
        grid.checkModel(p, false, false, false)
        if (indeterminateCnt > 0) {
          grid.indeterminateModel(p, true)
        }
      } else if (checkCnt === children.length) {
        // 전체 체크됨.
        grid.checkModel(p, true, false, false)
      } else {
        // 일부만 체크된 경우.
        grid.indeterminateModel(p, true)
      }
    }
  }

트리뷰 예제

treeView.onItemChecked = (tree, itemIndex, checked) => {
  const model = tree.getModel(itemIndex);
  tree.getDescendantModels(model).forEach(model => tree.checkRow(model.dataRow, checked, false, false));
  let p = tree.getModelOfRow(model.dataRow);
 
  // 규칙을 생각해 보자. checked하고는 크게 상관없다.
  while (p = tree.getParentModel(p, true)) {
    let checkCnt = 0;
    let indeterminateCnt = 0;
    const children = tree.getChildModels(p, true);
    for (const child of children) {
      tree.isCheckedRow(child.dataRow) && checkCnt++;
      tree.isIndeterminateRow(child.dataRow) && indeterminateCnt++;
    }
    if (checkCnt === 0) {
      // 전체 체크 안됨.
      if (p.dataRow < 0) {
        // 특정 header에 check를 하는 경우.
        tree.columnByName("treeName").checked = false;
      } else {
        tree.checkRow(p.dataRow, false, false, false);
      }
 
      if (indeterminateCnt > 0) {
        tree.indeterminateRow(p.dataRow, true)
      }
    } else if (checkCnt === children.length) {
      // 전체 체크됨.
      if (p.dataRow < 0) {
        tree.columnByName("treeName").checked = true;
      } else {
        tree.checkRow(p.dataRow, true, false, false);
      }
    } else {
      // 일부만 체크된 경우.
      tree.indeterminateRow(p.dataRow, true)
    }
  }
}