! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

Selector MergeManager동시 사용시 merge 범위 수정 > Q&A | 토론

본문 바로가기

Wijmo

Q&A | 토론

ReactJS Selector MergeManager동시 사용시 merge 범위 수정

페이지 정보

작성자 뀨르르 작성일 2021-10-17 17:52 조회 4,014회 댓글 0건
제품 버전 : 5.20202.699
컨트롤 이름 : FlexGrid

본문

import "@grapecity/wijmo.styles/wijmo.css";
import "bootstrap.css";
import "./app.css";
//
import * as React from "react";
import * as ReactDOM from "react-dom";
//
import * as wjCore from "@grapecity/wijmo";
import { FlexGridFlexGridColumn } from "@grapecity/wijmo.react.grid";
import * as wjGrid from "@grapecity/wijmo.grid";
import { Selector } from "@grapecity/wijmo.grid.selector";

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      data: null,
      selectedItems: [],
    };
    this.selector = null;
  }
  initGrid(grid) {
    this.selector = new Selector(grid, {
      itemChecked: (s, e) => {
        this.setState({
          selectedItems: grid.rows.filter((r) => r.isSelected),
        });
      },
    });
  }
  render() {
    return (
      <div className="container-fluid">
        <FlexGrid
          initialized={(s) => this.initGrid(s)}
          itemsSource={this.state.data}
          columnGroups={this.state.columnConfigs}
          autoGenerateColumns={false}
          alternatingRowStep={0}
          mergeManager={new RestrictedMergeManager()}
        ></FlexGrid>
      </div>
    );
  }

  initGrid(grid) {
    this.selector = new Selector(grid, {
      itemChecked: (s, e) => {
        this.setState({
          selectedItems: grid.rows.filter((r) => r.isSelected),
        });
      },
    });
  }

  componentDidMount() {
    this.setState({
      data: new wjCore.CollectionView(this.getData()),
      columnConfigs: this.getColumnConfig(),
    });
  }

  getColumnConfig() {
    let columnConfig = [
      {
        header: "type",
        binding: "type",
        allowResizing: true,
        width: 50,
        align: "center",
      },
      {
        header: "no",
        binding: "positionNo",
        allowResizing: true,
        align: "center",
        width: 50,
      },
      {
        header: "positionName",
        binding: "positionName",
        allowResizing: true,
        width: 80,
        align: "center",
      },
      {
        header: "a",
        binding: "a",
        allowResizing: true,
        width: 100,
        align: "center",
      },
      {
        header: "b",
        binding: "b",
        allowResizing: true,
        width: 100,
        align: "center",
      },
      {
        header: "c",
        binding: "c",
        allowResizing: true,
        width: 100,
        align: "center",
      },
      {
        header: "lastUpdateUserId",
        binding: "lastUpdateUserId",
        allowResizing: true,
        width: 150,
        isReadOnly: true,
        cssClass: "cell-readonly overflow_new_line",
        align: "center",
      },
      {
        header: "lastUpdateDate",
        binding: "lastUpdateDate",
        allowResizing: true,
        width: 150,
        isReadOnly: true,
        cssClass: "cell-readonly overflow_new_line",
        align: "center",
      },
    ];
    return columnConfig;
  }
  getData() {
    let data = [];
    data = [
      {
        positionName: "A1",
        c: "CPOS_T",
        lastUpdateUserId: "user",
        lastUpdateDate: "2021-08-25T12:01:00.000+09:00",
        a: "AC_A1",
        positionNo: 1,
        b: "CPOS_B",
        type: 1,
        lastUpdateUserName: "SPC Plus Admin",
      },
      {
        positionName: "A2",
        lastUpdateUserId: "user",
        lastUpdateDate: "2021-08-25T12:01:00.000+09:00",
        a: "AC_A2",
        positionNo: 2,
        b: "CPOS_A2",
        type: 1,
        lastUpdateUserName: "SPC Plus Admin",
      },
      {
        positionName: "1",
        lastUpdateUserId: "user",
        lastUpdateDate: "2021-08-25T12:01:00.000+09:00",
        positionNo: 3,
        type: 1,
        lastUpdateUserName: "SPC Plus Admin",
      },
      {
        positionName: "2",
        lastUpdateUserId: "user",
        lastUpdateDate: "2021-08-25T12:01:00.000+09:00",
        positionNo: 4,
        type: 1,
        lastUpdateUserName: "SPC Plus Admin",
      },
      {
        positionName: "3",
        lastUpdateUserId: "user",
        lastUpdateDate: "2021-08-25T12:01:00.000+09:00",
        positionNo: 5,
        type: 1,
        lastUpdateUserName: "SPC Plus Admin",
      },
      {
        positionName: "4",
        lastUpdateUserId: "user",
        lastUpdateDate: "2021-08-25T12:01:00.000+09:00",
        positionNo: 6,
        type: 1,
        lastUpdateUserName: "SPC Plus Admin",
      },
      {
        positionName: "SH",
        c: "SH",
        lastUpdateUserId: "user",
        lastUpdateDate: "2021-08-25T12:01:00.000+09:00",
        a: "AC_SH",
        positionNo: 7,
        b: "CPOS_SH",
        type: 1,
        lastUpdateUserName: "SPC Plus Admin",
      },
      {
        positionName: "A1",
        lastUpdateUserId: "user",
        lastUpdateDate: "2021-08-25T12:01:00.000+09:00",
        positionNo: 1,
        type: 2,
        lastUpdateUserName: "SPC Plus Admin",
      },
    ];
    return data;
  }
}
class RestrictedMergeManager extends wjGrid.MergeManager {
  getMergedRange(p, r, c, clip = true) {
    //
    // create basic cell range
    var rng = null;
    //
    // start with single cell
    rng = new wjGrid.CellRange(r, c);
    var pcol = 0;
    if (c !== 0 && c !== 6 && c !== 7) {
      return;
    }
    //
    // get reference values to use for merging
    var val = p.getCellData(r, c, false);
    var pval = p.getCellData(r, pcol, false);
    //
    // expand up
    while (
      rng.row > 0 &&
      p.getCellData(rng.row - 1, c, false) == val &&
      p.getCellData(rng.row - 1, pcol, false) == pval
    ) {
      rng.row--;
    }
    //
    // expand down
    while (
      rng.row2 < p.rows.length - 1 &&
      p.getCellData(rng.row2 + 1, c, false) == val &&
      p.getCellData(rng.row2 + 1, pcol, false) == pval
    ) {
      rng.row2++;
    }
    //
    // don't bother with single-cell ranges
    if (rng.isSingleCell) {
      rng = null;
    }
    //
    // done
    return rng;
  }
}
ReactDOM.render(<App />, document.getElementById("app"));

안녕하세요.
selector와 mergemanager를 동시에 사용하려고 하는데
type열을 기준으로 merge를 하고 a,b,c열은 merge하지 않으려고 합니다.
그러나 merge 사용시 selector도 같이 merge가 되는데 이것을 control할 수 있는지 궁금합니다.


원하는 결과는 다음과 같습니다.




위 스크린샷 처럼 selector를 merge를 안하거나
type기준으로 merge를 할 수 있는 방법이 궁금합니다.
감사합니다.
 
  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

1 답변

ReactJS Re: Selector MergeManager동시 사용시 merge 범위 수정

추천0 이 글을 추천하셨습니다 비추천0 채택채택

페이지 정보

작성자 GCK루시 작성일 2021-10-20 10:34 댓글 0건

본문

안녕하세요 그레이프시티입니다.


먼저 답변이 늦어진 점 죄송합니다.

1. FlexGrid rowHeader의 selector 체크박스가 merge 되지 않도록 처리 문의

=> 해당 기능과 관련하여 mergeManager에서 병합 처리 시, rowHeader인 경우, 빈 값을 return 하여 병합을 막는 방식으로 구현하실 수 있습니다. 자세한 코드는 아래 코드를 참고하여 주시기 바랍니다.


class RestrictedMergeManager extends wjGrid.MergeManager {
  getMergedRange(p, r, c, clip = true) {
    //
    if (p.cellType == wjGrid.CellType.RowHeader) {
      return;
    }
(....)


2. FlexGrid rowHeader의 selector가 merge 되도록 처리 

=> 기능 구현을 위해서 rowHeader에 대한 cellRange를 설정하고 getMergedRange 메서드를 재정의 해야 하며 데이터 셀에서 열의 병합 범위를 가져오므로 병합할 올바른 범위를 설정하실 수 있습니다. 아래 샘플을 참고하여 주시기 바랍니다.





다른 궁금한 점이 생기면, 문의 주시기 바랍니다. 


감사합니다. 

그레이프시티 드림 


* 그레이프시티(GrapeCity)는 개발자를 위하여 ComponentOne(컴포넌트원), Spread(스프레드), ActiveReports(액티브리포츠), SpreadJS(스프레드JS), Wijmo(위즈모)와 같은 엑셀 스프레드시트 리포팅 그리드와 차트 등 다양한 종류의 .NET JavaScript(자바스크립트) 컴포넌트 툴을 생산하고있는 개발툴 전문 회사 입니다

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.