오랜만에 마이플랫폼 공부. 마이플랫폼을 사용하는 곳이 많지 않다고는 하나 데이터셋은 참 편리하고, 다루는 게 익숙치 않아서 까다롭긴 하지만 그래서 더 재밌는 것 같다. 특히 자바스크립트와 비교해서 화면단 편집할 때 함수들이 많지 않아 불편할 순 있지만 작은 곳에서부터 하나하나 닦아 낸다는 느낌으로 찾아서 성공 시켰을 때의 소소한 재미가 있다.
오늘 내가 만들고 싶었던 건 두 개의 콤보 박스를 사용할 때 첫번째 콤보 박스 선택시 그와 연결된 값만 두번째 콤보 박스에 띄우도록 하고 싶었다.
ex) dsName1 => CODE_ID 칼럼의 값 1, 2, 3, 4 ··· 중 3번을 누르면 / dsName2 => CODE_ID 칼럼의 값 2, 2, 3, 1, 4, 4, 3 ··· 중 3번에 해당하는 다른 칼럼의 값을 띄우도록 말로 표현 하는 게 제일 어렵다···.
일전엔 적진 못 했지만 이번에도 Filter 메소드의 도움을 받았는데 구현하기까지 꽤 많은 시간이 소요 되었으니 기록하는 게 좋을 것 같아서 남긴다.
첫번째 콤보 박스 선택 시 실행이 되어야 하기 때문에 onChanged 함수에 사용을 한다. 파라미터 변수로 다양한 값들을 던질 수 있는데 여기서는 strCode 값을 사용했다. 내가 지정한 칼럼의 값(CODE_ID)을 받아 온다. Filter로 데이터셋의 정보를 거를 땐 초기화를 필히 해야 두번째 콤보 박스에 쓰레기 값이 담기지 않고, 필터 사용시 아래와 같은 방법이 있다.
function combo_OnChanged(obj,strCode,strText,nOldIndex,nNewIndex) {
// 필터 사용 전 초기화
dsName.UNFilter();
var sTemp = '';
for(var i=0; i < dsName.rowcount; i++) {
if( strCode == dsName.GetColumn(i, 'CODE_ID')) {
sTemp += "FIELD == \'" + dsName.getColumn(i, "Field") + "\'";
sTemp += '||'
}
}
// 마지막 '||' 제거
var sTemp2 = Substr(sTemp, 0, sTemp.length-2);
dsName.Filter(sTemp2); // 필터 적용
ComboName.DataColumn = 'FIELD'; // 편집된 데이터셋 전달
}
모든 변수 이름은 가정하에 기록했다. 파라미터로 던진 strCode의 값이 dsName의 칼럼 CODE_ID 값과 동일한 경우에만 두번째 콤보 박스에 뜨기 때문에 if문을 걸어주었다. 여기서 포인트는 필터의 사용 방법을 이해해야 if문 안을 채울 수 있다.
ex) dsName.Filter(" FIELD == '필드이름1' || FIELD == '필드이름' || ··· ");
이런 방법으로 필터를 사용해야 한다. 작은따옴표를 사용하기 위해서는 바로 앞에 \를 붙여 주어야 한다. 필터를 적용하고, 편집된 데이터셋을 DataColumn으로 전달하면 끝!
물론 더 쉽고, 좋은 방법이 있겠지만 내 수준에서는 이게 최선이었다. 자바스크립트만 파다가 오랜만에 마이플랫폼을 만질 수 있어서 재밌었고, 항상 그렇지만 오랜시간 고민한 뒤에 결국은 해결 돼서 기쁘다! 쁘이~!
마이플랫폼은 데이터셋 만지는 게 가장 관건인데 너무 어려운 것 같고.. 무엇보다 검색을 해도 나오는 게 1도 없으니 F1 도움말에만 의존해야 한다는 게 깨나 골치 아픈 것 같다. 다른 언어와 비교 했을 때 이건 왜 안 돼? 이건 왜 돼?? 놀랄 때도 많고, 다른 언어들의 소중함을 더 깨달을 수 있는 시간을 가질 수 있었는데 이걸 좋아해야 할지 말아야 할지 푸하하!
~끝~
'개발일지 > Miplatform' 카테고리의 다른 글
[MiPlatform] 다중 그리드 하나의 엑셀 시트에 저장(CreateExportObject함수 사용기) (0) | 2025.01.16 |
---|