엑스플랫폼 쇼케이스

[엑스플랫폼] 쇼케이스 따라하기 (22) - copy & Paste (1)

아이야이야 2012. 1. 10. 13:09

- Grid > Copy & Paste 1


타이틀이 많이 익숙한거죠. 이른바 개발자들의 신공이라 불리는...

물론 예제에서 설명하는 것은 그런건 아니고..

그리드의 데이터를 엑셀처럼 복사해다가 붙여넣는 여러가지 방법을 제안하고 있습니다.


그런건 엑셀에서 다 되는건데 엑스플랫폼에서는 복잡하게 뭔가 해야되는건가 싶을 수도 있지만

엑셀에서도 연산식이 포함된 셀을 복사하는 경우에는 셀 데이터만 복사하도록 설정해야 하는 과정이 있습니다.

그리고 엑셀과 그리드는 용도가 다르니깐...^^


첫 번째 예제에서는 2개의 그리드가 배치되어 있고

양쪽의 그리드에서 데이터를 복사해서 다른쪽으로 옮기거나 같은 그리드내에서 계속 작업을 진행할 수 있습니다.


그리드에 설정된 이벤트는 onkeydown 이벤트만 사용합니다.

이때 keyEventInfo가 전달되는데 altkey, ctrlkey, shiftkey는 상수로 제공되고

나머지는 keycode로 제공됩니다.

keycode 값은 해당 운영체제의 코드가 전달된다고 합니다.


기본적인 코드값은 도움말 Appendix > Key 에서 참고할 수 있습니다.

예제에서는 복사(Ctrl+C)와 붙여넣기(Ctrl+V) 입력값에 대한 처리를 진행합니다.

var strGrdDsNm = obj.binddataset;

var v_clip = "";

var strSeperate = " ";

for (var i=obj.selectstartrow;i<=obj.selectendrow;i++) {

for (var j=obj.selectstartcol;j<=obj.selectendcol;j++) {

if (j < obj.selectendcol) {

v_clip += obj.getCellValue(i,j) + strSeperate;

} else {

v_clip += obj.getCellValue(i,j);

}

}

if (i < obj.selectendrow) {

v_clip += "\r\n";

}

}

v_clip += "\r\n";

system.clearClipboard();

system.setClipboard("CF_TEXT",v_clip);

복사하기에서는 선택된 셀의 값을 v_clip에 텍스트 형식으로 담아주고 해당값을 시스템 클립보드에 담아주고 있습니다.

시스템 클립보드에 담아주기 때문에 외부 메모장 등에도 붙여넣을 수 있습니다.

예제이기 때문에 간단한 구분자만으로 데이터를 분리해주었습니다.


붙여넣기 작업은 이와 반대로 이루어지겠죠.

해당 위치를 확인하고 클립보드에서 데이터를 가져와서 배열에 담은 다음에 

데이터를 붙여넣습니다.

//Dataset setcolumn

for (var j=nGrdCellPos;j<nLoopCnt;j++) {

obj.setCellPos(j);

obj.showEditor(true);

obj.setEditText(arrText2[k]);

k++;

obj.showEditor(false);

}

데이터를 복사할때 해당하는 셀의 위치를 선택(setCellPos)하고
편집할 수 있는 모드로 전환한 다음(showEditor)
데이터를 붙여넣습니다(setEditText)
그리고 편집 모드를 닫아줍니다.

편집모드를 신경쓰지 않으려면 그리드에서 autoenter 설정을 바꾸어주어도 됩니다.

http://cafe.naver.com/xplatform101/174