ReactJS Cell 세로 merge 문의
추천0 비추천 0
페이지 정보
작성자 jaylee 작성일 2024-04-29 13:06 조회 54회 댓글 0건제품 버전 : 5.20241.9
컨트롤 이름 : wijmo
본문
관련링크
안녕하세요.
cell merge 관련 문의입니다.
아래 그리드를 보면 3번째 row까지 3개의 단일 row들이
merge되어 총 3개의 row로 보입니다.
그 이후 row들은 cell 데이터값이 동일해서인지 9개의 row가 머지가됩니다.
데이터값과 상관없이 row 3개 기준으로 머지가 되었으면 합니다.
예제소스가 있으면 공유 부탁드립니다..
현재 사용중인 CustomMergeManager
class CustomMergeManager extends MergeManager {
getMergedRange = (panel: GridPanel, row: number, col: number, clip = true): any => {
if (panel.cellType === CellType.ColumnFooter) {
const rg = new CellRange(row, col)
if ([0, 1, 2, 3, 4, 5].includes(rg.col)) {
rg.col = 0
rg.col2 = 5
}
if ([1, 2].includes(rg.row) && [6, 7, 8].includes(rg.col)) {
rg.col = 6
rg.col2 = 8
}
return rg
}
if (panel.cellType === CellType.ColumnHeader) {
const rng = new CellRange(row, col)
// expand left/right
for (let i = rng.col; i < panel.columns.length - 1; i++) {
if (
panel.getCellData(rng.row, i, true) !== panel.getCellData(rng.row, i + 1, true)
) {
break
}
rng.col2 = i + 1
}
for (let i = rng.col; i > 0; i--) {
if (
panel.getCellData(rng.row, i, true) !== panel.getCellData(rng.row, i - 1, true)
) {
break
}
rng.col = i - 1
}
// expand up/down
for (let i = rng.row; i < panel.rows.length - 1; i++) {
if (
panel.getCellData(i, rng.col, true) !== panel.getCellData(i + 1, rng.col, true)
) {
break
}
rng.row2 = i + 1
}
for (let i = rng.row; i > 0; i--) {
if (
panel.getCellData(i, rng.col, true) !== panel.getCellData(i - 1, rng.col, true)
) {
break
}
rng.row = i - 1
}
return rng
}
if (panel.cellType === CellType.TopLeft) {
// top-left cells, merge ranges
return new CellRange(0, 0, panel.rows.length - 1, panel.columns.length - 1)
}
if (panel.cellType === CellType.RowHeader) {
const rng = this.getMergedRange(panel.grid.cells, row, 1, clip) as CellRange
const eaderCellRange = new CellRange(row, col)
if (rng != null) {
eaderCellRange.row = rng.row
eaderCellRange.row2 = rng.row2
}
return eaderCellRange
}
// 셀 영역
if ([0, 1, 2, 3].includes(col) && panel.cellType === CellType.Cell) {
if (clip === void 0) {
clip = true
}
let rng: CellRange | null = new CellRange(row, col)
const val = panel.getCellData(row, col, false)
const pval = panel.getCellData(row, 1, false)
// 위로 병합할 경우
while (
rng.row > 0 &&
panel.getCellData(rng.row - 1, col, false) === val &&
panel.getCellData(rng.row - 1, 1, false) === pval
) {
rng.row--
}
// 아래로 병합할 경우
while (
rng.row2 < panel.rows.length - 1 &&
panel.getCellData(rng.row2 + 1, col, false) === val &&
panel.getCellData(rng.row2 + 1, 1, false) === pval
) {
rng.row2++
}
// 단일 셀인 경우
if (rng.isSingleCell) {
rng = null
}
return rng
}
}
}
댓글목록
등록된 댓글이 없습니다.