* Powerbuilder 10.5

 

 

 

지난 강의 숙제는 부서 ddlb 의 부서목록이 변경될 때 그 부서코드값을 받아서 i_dwchild.retrieve 의 아규먼트로 넘겨주는 것이었습니다.

 

부서 ddlb의 부서목록이 변경될 때 -> ddlb_dept.selectionChanged 이벤트

부서코드값을 받아서 -> ddlb_dept.text

 

이 정도로 정리할 수 있습니다.

 

w_list 의 ddlb_dept.selectionChanged 이벤트를 엽니다.

 

wf_retrieve( trim(right(ddlb_job.text, 10)), integer(trim(right(ddlb_dept.text, 10))) )

 

현재 작성되어 있는 스크립트입니다.

 

wf_retrieve 의 두번째 아규먼트가 바로 부서코드값입니다. 이것을 활용하면 되겠네요.

 

위 스크립트 바로 위에 다음 스크립트를 추가합니다.

 

i_dwchild.retrieve(integer(trim(right(ddlb_dept.text, 10))))

 

그럼 전체 스크립트는 요렇게 되죠.

 

i_dwchild.retrieve(integer(trim(right(ddlb_dept.text, 10))))

wf_retrieve( trim(right(ddlb_job.text, 10)), integer(trim(right(ddlb_dept.text, 10))) )

 

i_dwchild 의 retrieve 함수의 아규먼트로 부서코드를 넣었습니다.

부서목록을 선택할 때마다 선택된 부서코드가 아규먼트로 되기 때문에 원하는 결과를 얻을 수 있습니다.

 

실행해서 확인해 봅니다.

 

 

 

 

부서 ddlb의 값이 RESERCH 가 되자 dw_emp 의 부서명 칼럼의 dddw 데이터 목록도 RESEARCH 만 존재합니다. 부서 ddlb 의 값을 전체로 하면 처음으로 돌아갑니다.

 

i_dwchild.retrieve(integer(trim(right(ddlb_dept.text, 10))))

wf_retrieve( trim(right(ddlb_job.text, 10)), integer(trim(right(ddlb_dept.text, 10))) )

 

위 스크립트에서 중복된 코드가 있으므로 편리한 관리를 위해 다음과 같이 작성해 볼 수도 있겠네요.

 

 

int li_deptno

 

li_deptno = integer(trim(right(ddlb_dept.text, 10)))

 

i_dwchild.retrieve(li_deptno)

 

wf_retrieve( trim(right(ddlb_job.text, 10)), li_deptno )

 

 

부서코드 값을 li_deptno 라는 int 변수에 저장한 후 사용했습니다.

 

숙제 풀이는 여기서 끝내고 이번 강의 진행하겠습니다.

 

 

w_list 의 삭제버튼(cb_delete)을 클릭하면 선택된 하나의 로우만 삭제시킵니다.

여러개의 로우를 선택한 후 삭제하고 싶다면?

 

일단, 따라해 보세요.

 

d_emp 를 엽니다. (dw_emp -> 마우스 우클릭 -> 팝업창에서 Modify DataWindow... 선택)

그리고 Data Source (쿼리)를 엽니다.

0 as del

라는 칼럼을 추가 합니다.

 

 

 

Return 버튼 클릭~

 

그럼 Update Properties 를 다시 설정하라는 메시지가 보입니다.

Update Properties 를 열어서 다시 설정합니다. 

 

그리고 d_emp 의 Design 창을 보면 del 이라는 칼럼과 'Del' 텍스트 속성의 텍스트오브젝트가 추가된 것이 보입니다.

 

 

 

 

Preview 창을 통해서 Del 칼럼을 no 와 emp_empno 칼럼 사이로 이동시키고

텍스트와 폰트를 적당히 수정합니다.

 

 

 

 

 

del 칼럼을 선택하고

Properties(속성창) - Edit - Style Type  

에서 CheckBox 를 선택합니다.

 

 

 

 

그리고 아래부분의 나머지 속성도 다음과 같이 작성합니다.

 

 

 

 

 

 

 

 

 

3-D Look 는 체크박스의 모양을 움푹 들어가게 만듭니다.

(윈도우7에서는 차이 없음)

 

 

 

 

On 은 V 체크되었을 때를 뜻하고 그 값을 1로 설정합니다.

Off 는 체크가 해제된 상태이고 그 값을 0으로 설정합니다.

 

 

 

 

 

 

그 다음은 Tab Order 버튼을 클릭합니다.

 

 

 

 

del 칼럼에 자동으로 탭오더가 10으로 부여되어 있습니다.

이렇게 탭오더가 부여되어 있어야 del 을 수정할 수 있으니 확인하고 넘어갑니다.

 

 

어플리케이션을 실행합니다.

 

 

 

 

이렇게 여러 로우를 선택할 수 있게 되었습니다.

 

 

 

 

 

 

 

 

 

 

 

 

삭제버튼을 클릭했을 때, 이렇게 선택된 로우를 찾아서 모조리 삭제하는 것입니다.

삭제버튼(cb_delete)의 Clicked 이벤트를 수정해야 합니다.

 

두 가지 방법이 있습니다.

첫번째 방법은 For Loop 를 사용해서 모든 로우의 del 칼럼 값을 체크해서 그 값이 1이면 삭제하는 방법이고

두번째 방법은 Do Loop 와 Find 함수를 사용해서 del 칼럼 값이 1인 것만 찾아 삭제하는 방법입니다.

 

두 가지 모두 의미 있는 방법입니다. 그러나 첫번째 방법은 모든 로우를 체크해야 하므로 로우수가 많을 경우, 퍼포먼스가 조금 떨어진다는 단점이 있습니다.

다음 강의에 두 가지 방법을 모두 소개하겠습니다.

 

첫번째 방법은 직접 해보시기 바랍니다.

 

수고하셨습니다.

 

 

 

Posted by 신선봉(닉네임)

댓글을 달아 주세요

  1. 서승현 2014.04.23 08:15 신고  댓글주소  수정/삭제  댓글쓰기

    매번 좋은 강의 감사드립니다.!! 보면서 실무에서 유용하게 쓰이고 있습니다.!