Cell Merge를 구현할 알고리즘!
그리드 헤더를 병합하는데, Custom 하기 위해서는 소스코딩이 많이 들어간다. 일일이 쳐야되니까.
그래서 알고리즘을 하나 만들어봐야겠다고 생각해서... 만들었는데 6시간이나 타이핑쳐서 만들었넹.
이런 그리드일때 이걸 병합하려면 일일이 코드를...
X |
X |
X |
Y |
Z |
W |
U |
Y |
그럼 같은 값을 가진 Cell들을 그룹지어 묶어주면 되겠지?
음... 처음엔 for .. for 를 이용해서 무작정 돌려봤는데 .. 쉽게 안묶인다.
그래서 고안해 낸 방법은 자세한 내용은 담에 적고
간략히 XXX를 먼저 그룹으로 묶고
X를 구하고
W를 구하고
U를 구하고
Y
Y를 구한다.
곧 col > 증가시키면서 그룹을 먼저 묶은 후 하위 엘리먼트의 col 비교값을 제한한다.
row를 증가시키고 증가할수 없으면 col시작 값을 증가시키면서 그룹을 묶어 가면 된다.
( 소스 숨김 )
## 추가!!
1. x 값을 버퍼에 저장
2. row 0에서 x값과 같은 cell[ row, col ]값을 찾아 탐색. Y를 만나면 break 하면서 row0번의 colmax를 3으로 지정
3. row 1에서 x값과 같은 cell[ row, col ]값을 찾아 탐색. Z를 만나면 break 하면서 row1번의 colmax를 0으로 지정
4. 탐색 탈출.
4-1. 모여진 집합으로 CellRange 셋팅!
4.2. row별로 모인 카운트 정보가 다르면 가장 윗 row 컬렉션 정보만을 병합대상으로 관리하고 나머지는 버림.
5. row를 증가시킬수 있는지 체크 > yes : 증가 , 아니면 row별 colmax값과 현재 col시작값을 비교하여 적으면 col을 증가
6. 현재 row의 이하 row별 colmax를 초기값(colcount)으로 재지정
7. 다시 탐색. ( 마지막 cell까지 탐색을 마치면 그룹별로 CellRange 목록이 만들어짐 )
ㅡ.,ㅡ;; 젠장... 테스트를 할수록 버그가 텨나오넹...
쩝...
# 추가 수정. 버그 잡았다!! 우쒸!!
이런 소스를 아래처럼 해당 위치 좌표를 구해온다.
몇줄이 되었든 이제야 제대로 좌표를 수집해온다.
이걸 이용하면 그리드 Merge된 소스를 쉽게 만들어낼 수 있게 된다.
## 추가 수정
- 업로드되어 있던 소스에 대한 업데이트!! ( 약간 오류가 있는 버전으로 업데이트가 안되어있어 수정 )
- 표 그리기 처리하면서 다시 수정된 버젼 올림.
## 추가 수정
이번에 새로 단순 병합모드를 지원하는 소스를 만듬.
- 단방향으로 쭉 훑어가므로 간단하지만, 동일한 내용이 흩어져있으면 원하는 결과가 나타나지 않음.
ex) 'Z'가 'I' 라면 처음위에 만든 소스는 구분해서 병합함.
이건 구분하지 못함.
용도 - 이번 플젝에서 ultragrid 동적으로 컬럼 구성하고 병합해야 하는데 뭔가 부실해...
회사에서 6시간 가까이 하던게 안되서 그냥 집에서 10분만에 만들어 ... 가져가서 쓰려고 기록함.
내용상 단방향으로 훑었을때 데이타가 같은게 흩어져있지 않음.
'# 1) 프로그래밍' 카테고리의 다른 글
연말정산 프로그램? API... ( 이게 아니란다. ) (0) | 2016.01.20 |
---|---|
다음 맵 API 관련. (0) | 2016.01.11 |
Xaml 정리기 (0) | 2015.09.04 |
Visual studio Community 2013 설치! (0) | 2014.12.07 |
app.config Section 작성 변환기... (0) | 2014.11.05 |