*PowerBUilder 10.5


w_list 를 엽니다.

그리고

상단의 아이콘 메뉴의 컨트롤 모음창에서 Create DropDownListBox Control



또는

메뉴 - Insert - Control - DropDownListBox 를 선택하세요

그런 다음 바로 w_list 의 왼쪽 상단의 빈공간을 클릭합니다.





그럼 위와같은 박스가 생깁니다.



박스를 클릭하면 이렇게 목록창이 아래로 열립니다.
이제 여기에 직급 목록을 넣어주면 되는데요.






두 가지 방법이 있습니다. 하나는 목록을 파빌에 직접 세팅하는 거고 다른 하나는 목록을 DB 에서 가져와서 세팅하는 방법입니다.

DropDownListBox(이하 ddlb) 의 이름은 ddlb_ 로 시작하는 것이 관례입니다. 현재 ddlb 의 Name 이 ddlb_1 으로 되어 있을 겁니다. 이것을 ddlb_job 이라고 수정합니다. 그리고 ddlb 목록의 데이터를 아이템(Item)이라고 합니다.

 

 


ddlb_job 의 속성창 - Items 에서 아이템을 직접 입력할 수 있습니다.

왼쪽처럼 두 개 아이템만 입력하고난 다음 실행해 보세요.












 




ddlb_job 의 화살표를 클릭하면 좀 전에 입력한 아이템 목록이 열립니다.








아이템을 직접 파빌에 입력했는데요. 이러한 코딩을 하드코딩이라고 합니다. 데이터를 DB에서 가져오지 않고 직접 소스에 입력하는 거죠. 이렇게 하면 쉽게 끝날 것 같지만....  실전에서 이렇게 했다간 유지보수에 손이 많이 가게됩니다.

직급명이 변경될 때마다 개발자가 소스를 열어서 직접 수정하고 난 다음 프로그램을 재배포해야 합니다. 말은 간단 하지만 그런 일이 빈번할 경우에는 좀 곤란해지겠죠?

그래서 실전에서는 하드코딩을 지양하고 DB에서 데이터를 가져와서 세팅하는 것이 일반적입니다.


소스로 돌아와서 ddlb_job 에 입력해뒀던 아이템을 삭제합니다. 아이템을 클릭한 다음 Delete 키를 누르면 됩니다.

이제 DB에서 직급 목록을 조회해서 ddlb_job 에 세팅하도록 해보겠습니다.

1.DB에서 직급 목록을 조회해서 -> Retrieve 함수
2.ddlb_job 에 세팅 -> AddItem 함수


먼저 직급 목록을 가져오기 위한 쿼리를 만듭니다.

사용자 scott 은 직급 목록 테이블을 가지고 있지 않습니다. 실전에서는 직급 목록을 관리하는 테이블이 존재합니다.여기서는 어쩔 수 없이 emp 테이블의 직급을 가져오겠습니다.

select distinct job
from emp
order by job


이 정도 쿼리면 될거 같네요.

이 쿼리로 d_job_list 라는 이름으로 grid 타입의 dw 를 생성하세요.

그리고 w_list 에 d_job_list 를 연결할 dw 컨트롤을 dw_job_list 라는 이름으로 만듭니다.


 





DataObject에
d_job_list 를 입력합니다.
















dw_job_list 에서 조회한 데이터를 ddlb_job 의 아이템으로 입력할 건데요.

dw_job_list 자체는 화면에 보일 필요가 없습니다.


 

속성창에서 Visible를 체크해제(invisible)합니다.

그럼 바로 화면에서 사라지는데요. 프로그래밍할 때는 화면에 보여야 합니다.

메뉴 - Design - Show Invisibles
를 클릭합니다.

그럼 invisible 로 설정된 모든 컨트롤이 보입니다.

그리고 쉽게 관리하기 위해서 TitleBar 를 체크합니다.

그리고 Title 을 dw_job_list 로 수정합니다





프로그램이 시작할 시점에 dw_job_list 에서 목록을 조회해서 ddlb_job 에 추가하겠습니다.

open 이벤트를 열고


 







빨간색 네모칸 안의 스크립트를 추가합니다.















dw_job_list.SetTransObject(sqlca)   // dw_job_list 가 sqlca 를 사용할 수 있도록 설정

int li_cnt, i


li_cnt = dw_job_list.Retrieve()    // dw_job_list 에서 직급목록 개수를 li_cnt 에 받아둠

For i = 1 to li_cnt
 
   ddlb_job.AddItem(dw_job_list.getItemString(i, 'job'))
 
Next



dw_job_list.getItemString(i, 'job') 
-> dw_job_list 의 조회 결과에서 i 번째 목록의 job 칼럼의 값을 가져옵니다.

ddlb_job.AddItem(dw_job_list.getItemString(i, 'job'))
-> 위에서 가져온 값을 ddlb_job 의 아이템으로 추가한다.(ddlb의 AddItem 함수의 인수는 string 타입입니다.)


실행해 보세요.




화살표를 클릭하면 이렇게 직급 목록이 보입니다. 목록창의 세로 길이가 작아서 목록이 짤립니다.
ddlb_job 의 속성중VScrollBar 를 체크합니다. 그럼 세로 스크롤이 생깁니다. 그런데 세로 길이가 너무 작아서 불편합니다.





소스에서 ddlb_job 을 클릭한 뒤에 크기를 조절해 봅니다.


 



ddlb 의 세로 크기를 이렇게 길게 조절해도 실행해 보면 목록이 다 보일 만큼만 세로크기가 조절됩니다. VScrollBar 는 자동으로 사라집니다.

















ddlb 의 다른 속성을 살펴볼까요?

 

 












Sorted 는 아이템을 오름차순으로 정렬시킵니다.

ShowList 는 목록창을 항상 보이게 합니다.








수고하셨어요.

Posted by A4M
,