안녕하세요 그레이프시티입니다.
문의 주신 내용에 대해 다음과 같이 답변 드립니다.
1. 병합된 셀을 기준으로 행의 헤더를 병합하는 방법
FlexGrid 컨트롤의 MergeManager 클래스를 재 정의한 후 해당 클래스를 FlexGrid 컨트롤의 mergeManager 속성에 할당하여 특정 기준에 맞게 셀을 병합할 수 있습니다.
병합된 셀을 기준으로 행의 헤더를 병합하시려는 경우, 셀의 cellType 속성이 "RowHeader" 일 때 dataItem 속성의 특정 값이 동일한 셀을 병합하는 코드를 구현하시면 됩니다.
자세한 코드는 아래의 샘플을 참고해 보시기 바랍니다.
이와 관련된 데모 및 API 문서를 공유 드리오니 참고해 보시기 바랍니다.
- 사용자 정의 병합 (React) 데모
- MergeManager API 문서
- cellType API 문서
- CellType Enumeration RowHeader API 문서
- dataItem API 문서
2. 병합된 셀을 기준으로 행을 드래그 및 드롭으로 위치를 변경하는 방법
allowDragging 속성이 "Both" 로 지정된 FlexGrid 컨트롤의 draggingRow 이벤트와 draggedRow 이벤트를 이용하여 병합된 셀을 기준으로 행의 위치를 변경할 수 있습니다.
draggingRow 이벤트에는 병합된 셀이 속하는 행들의 인덱스 값을 불러와 저장하는 코드를, draggedRow 이벤트에는 splice 메서드를 이용하여 병합된 셀이 속하는 행들의 위치를 변경하는 코드를 구현해 보시기 바랍니다.
자세한 코드는 아래의 코드를 참고해 보시기 바랍니다.
let dragIndex = []; // 병합된 셀이 속하는 행들의 인덱스 값
const draggingRow = (s, e) => { // 병합된 셀이 속하는 행들의 인덱스 값을 불러오는 코드
dragIndex = [];
let country = s.rows[e.row].dataItem.country;
for (var i = 0; i < s.rows.length; i++) {
if (s.rows[i].dataItem.country == country) {
dragIndex.push(i);
}
}
};
const draggedRow = (s, e) => { // 병합된 셀이 속하는 행들의 위치를 변경하는 코드
let dropIndex = e.row,
arr = s.collectionView.items,
item = [];
s.collectionView.deferUpdate(() => {
for (var i = 0; i < dragIndex.length; i++) {
item.push(arr[dragIndex[i]]);
}
arr.splice(dragIndex[0], dragIndex.length);
if (dragIndex[0] >= dropIndex) { // 아래의 행을 위로 드래그 앤 드롭
for (var i = 0; i < item.length; i++) {
arr.splice(dropIndex + i, 0, item[i]);
}
} else if (dragIndex[0] < dropIndex) { // 위의 행을 아래로 드래그 앤 드롭
for (var i = 0; i < item.length; i++) {
arr.splice(dropIndex - (item.length - 1) + i, 0, item[i]);
}
}
});
이와 관련된 데모 및 API 문서를 공유 드리오니 참고해 보시기 바랍니다.
- 재정렬 | Reordering (React) 데모
- draggingRow API 문서
- draggedRow API 문서
- items API 문서
- deferUpdate API 문서
다른 궁금한 점이 생기면, 문의 주시기 바랍니다.
감사합니다.
그레이프시티 드림