파워빌더(PowerBuilder) 강의 - 35.SelectionChanged PowerScript event (DropDownListBox)
파워빌더 기초강의1 2011. 11. 13. 20:01
dw_job_list.SetTransObject(sqlca) int li_cnt, i li_cnt = dw_job_list.Retrieve() For i = 1 to li_cnt
dw_job_list.SetTransObject(sqlca) int li_cnt, i li_cnt = dw_job_list.Retrieve() For i = 1 to li_cnt listboxname.SelectItem ( itemnumber )
*PowerBUilder 10.5
저번 강의에서는 ddlb_job 을 만들어 봤습니다.
ddlb_job 에서 직급을 선택하면 선택된 직급만 조회가 되도록 만들어 보겠습니다.
1. ddlb_job 에서 직급을 선택하면 -> ddlb_job.selectionchanged 이벤트
2. 선택된 직급만 조회가 되도록 -> wf_retrieve 함수
SelectionChanged PowerScript event
설명
컨트롤 안에서 아이템이 선택될 때 발생
ddlb_job 컨트롤을 더블클릭하면 selectionchanged 이벤트가 바로 열립니다.
선택된 직급(아이템)을 받아서 wf_retrieve 함수의 인수로 넣어주면 됩니다.
selectionchanged (integer index) 에서 index 는 아이템의 순서입니다.
첫번째 아이템인 ANALYST 를 선택하면 1이 넘어오고
두번째 아이템인 CLERK 을 선택하면 2가 넘어오는 식입니다.
여기서는 index 를 사용하지 않습니다.
ddlb_job.text 는 ddlb_job 에서 선택된 아이템의 텍스트를 가져옵니다. 이것을 wf_retrieve 의 인수로 넣으면 되는거죠. 위 화면처럼...
실행해 보세요.
직급을 선택하면 선택된 직급만 조회되는 것을 볼 수 있습니다.
여기서 직급을 한번 선택하고 나면 선택된 직급의 사원만 조회되지 모든 사원을 조회할 수가 없게 됩니다.
ddlb_job 에 전체 직급을 선택할 수 있도록 해 보겠습니다.
w_list.open 이벤트를 열어보세요.
dw_emp.SetTransObject(sqlca)
ddlb_job.AddItem('전체') // 이 부분을 추가합니다.
ddlb_job.AddItem(dw_job_list.getItemString(i, 'job'))
Next
wf_retrieve('%')
실행해 보세요.
분명히 '전체' 아이템을 먼저 넣었는데 맨 아래에 있습니다.???
ddlb_job 의 Sorted 속성을 체크하면 이렇게 됩니다. 한글이 알파벳보다 더 크기 때문에 나타나는 현상입니다. Sorted 속성을 체크해제 하면 먼저 추가한 아이템이 위에 오게 되므로 '전체' 아이템이 맨 위로 오게 됩니다.
실행해서 확인해 보시구요.
현재 프로그램을 실행하자마다 모든 사원이 조회되므로 실행할 때 ddlb_job 의 '전체' 아이템이 자동으로 선택되게 하면 어떨까요?
w_list.open 이벤트에서...
dw_emp.SetTransObject(sqlca)
ddlb_job.AddItem('전체')
ddlb_job.AddItem(dw_job_list.getItemString(i, 'job'))
Next
ddlb_job.SelectItem(1) // 이 부분을 추가합니다.
wf_retrieve('%')
SelectItem PowerScript function
문법
SelectItem 함수는 아이템의 순서인 indexnumber 에 해당하는 아이템을 선택합니다.
ddlb_job.SelectItem(1) 는 첫번쩨 아이템을 선택하는 것이 됩니다.
실행해 보세요.
'전체' 아이템이 선택되면서 모든 사원이 조회되었으니 훨씬 자연스럽습니다.
그런데 '전체' 아이템을 선택해보면 아무도 조회가 안됩니다.
인수가 '전체' 이기 때문인데요...인수가 '%' 가 되면 해결 됩니다. 어떻게 해야 할까요?
여러가지 방법이 있는데요.
ddlb_job.selectionchanged 이벤트를 열어서 다음과 같이 수정합니다.
string ls_txt
ls_txt = ddlb_job.text // ddlb_job.text 의 값을 ls_txt 에 저장
if ls_txt = '전체' then // ls_txt 가 '전체'면
ls_txt = '%' // ls_txt 에 '%' 를 저장
end if
wf_retrieve(ls_txt)
실행해 보세요.
'전체'를 선택하면 모든 사원이 조회됩니다.
다른 방법도 있는데요.
일단 ddlb_job.selectionchanged 이벤트의 스크립트는 다음과 같이 수정합니다.
//
//string ls_txt
//
//ls_txt = ddlb_job.text
//
//if ls_txt = '전체' then
// ls_txt = '%'
//end if
//
//wf_retrieve(ls_txt)
wf_retrieve(ddlb_job.text)
먼저 작성했던 스크립트는 코멘트 처리했네요.
w_list.open 이벤트를 엽니다.
dw_emp.SetTransObject(sqlca)
dw_job_list.SetTransObject(sqlca)
int li_cnt, i
li_cnt = dw_job_list.Retrieve()
ddlb_job.AddItem('전체 %') // 이렇게 수정합니다
For i = 1 to li_cnt
ddlb_job.AddItem(dw_job_list.getItemString(i, 'job'))
Next
ddlb_job.SelectItem(1)
wf_retrieve('%')
그리고 ddlb_job.selectionchanged 이벤트로 갑니다.
//
//string ls_txt
//
//ls_txt = ddlb_job.text
//
//if ls_txt = '전체' then
// ls_txt = '%'
//end if
//
//wf_retrieve(ls_txt)
wf_retrieve( trim(right(ddlb_job.text,10)) ) // 이렇게 수정합니다
ddlb_job 에
'전체 %'
이 아이템을 추가했는데요. '%' 을 활용하려고 하는 겁니다.
right(ddlb_job.text,10) 는 ddlb_job.text 에서 오른쪽에서 10 글자만큼 가져옵니다.
10은 직급 문자열 중에 가장 큰 것보다 더 큰 숫자입니다. 대략 잡은 거죠.
right(ddlb_job.text,10) 는 결과적으로
' %'
'ANALYST'
'CLERK'
...
이렇게 가져옵니다.
' %' 에서 스페이스는 9개 이상이어야 합니다. 그렇지 않으면 '전체' 문자열 부분이 포함되어 버리죠.
' %' 을 사용하려면 공백문자를 없애야 합니다. 그래서 trim 을 사용했습니다.
실행해보세요.
엥? % 부분이 보입니다. ㅎㅎ
스페이스를 더 넣어주면 해결되겠죠?
w_list.open 이벤트
ddlb_job.AddItem('전체 %')
이 부분에서 전체와 % 사이의 공백을 더 추가하면 됩니다.
ddlb_job.AddItem('전체 %')
ㅎㅎ 무식해 보입니다. 그래서 다음과 같이 해봅니다.
ddlb_job.AddItem('전체' + space(30) +'%')
space 함수는 인수만큼 공백으로 채웁니다.
실행합니다.
그런데 수평 스크롤이 생겨서 수평스크롤을 오른쪽으로 옴기면
'%' 가 보이게 됩니다.
ddlb_job 의 HScrollBar 속성을 체크해제하면 해결됩니다.
이제 실행해 보면 자연스럽게 보입니다.
수고하셨습니다.
'파워빌더 기초강의1' 카테고리의 다른 글
파워빌더(PowerBuilder) 강의 - 37.SetFilter & Filter method (DataWindows) (8) | 2011.11.19 |
---|---|
파워빌더(PowerBuilder) 강의 - 36.Adding Retrieval Argument to DataWindow (20) | 2011.11.15 |
파워빌더(PowerBuilder) 강의 - 34.DropDownListBox control (12) | 2011.11.11 |
파워빌더(PowerBuilder) 강의 - 33.Adding Parameter to Window Object Function (6) | 2011.11.07 |
파워빌더(PowerBuilder) 강의 - 32.Object Function (Window) (3) | 2011.11.04 |