* Powerbuilder 10.5
지금 사용자 목록화면(w_list)을 계속해서 수정하고 있습니다.
저번 강의에서는 추가 버튼을 눌렀을 때, 목록화면(dw_emp)의 마지막에 로우를 추가하는 것까지 해봤습니다.
로우를 추가는 했는데, 좀 밋밋합니다.
새로운 로우를 추가했을 때, 자동으로 선택반전시켜 보는게 좋겠네요.
새로운 로우를 추가했을 때 -> cb_insert.clicked 이벤트, InsertRow 함수
자동으로 선택반전 -> SelectRow 함수
li_row 라는 int 형의 변수를 선언해서
dw_emp.InsertRow(0) 에서 반환하는 추가된 로우의 넘버를 저장시킵니다.
이전의 선택반전은 해제하고
추가된 로우를 선택반전합니다.
이제 실행해서 확인해 보세요. 뭐...잘 될 겁니다.
옆의 화면은 마지막 중괄호를 생략한 뒤, 저장을 하려고 했을 때 나타나는 화면입니다.
여러분들은 이런 화면을 벌써 경험했을 것 같네요. 솔직히 설명이 좀 늦었습니다. ㅠ.ㅠ 너그러이 ㅎㅎ
대부분의 언어에서는 컴파일 수행시 에러를 잡아주는데요. 파워빌더도 마찬가지입니다.
차이점은 파워빌더에서는 저장하기 전에 먼저 컴파일(compile)을 한다는 것과 컴파일이 되지 않으면 저장이 안된다는 것입니다.
ctrl + L 단축키를 누르면 이 또한 컴파일을 수행합니다. 컴파일만 하고 저장은 안 합니다.
저장을 안하고 컴파일을 통해서 에러를 잡고 싶다면 ctrl + L 하면 됩니다.
여담인데요. 대부분의 편집툴에서 지원하는 단축키도 파워빌더에서 쓸 수 있습니다.
ctrl + A, ctrl + C, ctrl + V 등등....
이거 모르면 빨리 코딩하기가 어렵죠. copy & paste 는 코딩의 기본이니...관련 단축키는 꼭 활용을...
그리고 추가버튼을 눌렀을 때, 추가된 로우로 포커스를 주는 것이 좋겠습니다.
dw 포커스 3종세트를 사용했습니다.
emp_ename 칼럼에 포커스가 가겠죠?
(18강을 참고하세요)
현재, 추가 버튼을 계속 누르면 로우가 계속 추가됩니다. 좀 거시기 하죠?
추가버튼을 눌렀을 때, 가장 마지막 로우의 사원번호가 비어 있으면 새로운 로우를 추가하지 않도록 해 보겠습니다.
가장 마지막 로우의 사원번호 -> RowCount 함수, GetItemNumber 함수
비어있으면 -> IsNull 함수
RowCount method (DataWindows)
설명
dw 에서 현재의 전체 로우수를 반환합니다.
문법
long dwcontrol.RowCount ( )
반환값
dw 의 전체 로우수
로우가 없으면 0
에러시 -1
GetItemNumber method (DataWindows)
설명
dw 에서 숫자형의 데이터를 가져온다.
문법
numeric dwcontrol.GetItemNumber ( long row, string column )
row : 가져오려는 데이터의 로우 넘버
column : 가져오려는 데이터의 칼럼명
반환값
가져오려는 칼럼의 숫자형 값
IsNull PowerScript function
설명
변수나 표현식의 값의 null 여부를 알린다.
문법
IsNull ( any )
any : 모든 변수나 표현식
반환값
null 이면 true
null 이 아니면 false
위 화면에서 방금 추가한 스크립트에 대해서 설명하겠습니다.
int li_rcnt
li_rcnt = dw_emp.RowCount() // dw_emp 의 전체 로우수를 li_rcnt 에 저장
If li_rcnt > 0 Then // li_rcnt 가 0일 경우는 제외
int li_empno
li_empno = dw_emp.GetItemNumber(li_rcnt, 'emp_empno') // 마지막 로우의 emp_empno 값을 가져와
// li_empno 에 저장
If IsNull(li_empno) Then // li_empno 값이 null 이면
Return
End If
End If
null 값이란 빈 값을 뜻합니다. 아무런 데이터가 입력되지 않은 값이죠.
dw 에서 로우를 추가하고 아무런 데이터를 입력하지 않았을 때, 각각의 칼럼값들은 자료형에 관계없이 모두 null 입니다.
(단, dw에서 Column Specification 의 Initial value 에 값을 넣어주면 그 값이 초기값이 됩니다. 이 부분에 대해서는 추후에 다룹니다.)
li_empno = dw_emp.GetItemNumber(li_rcnt, 'emp_empno')
첫번째로 추가 버튼을 누를 때, 마지막 로우의 emp_empno 칼럼은 null값이 아니므로 li_empno 값은 반드시 null이 아닙니다. 그리고 새로운 로우가 추가됩니다.
두번째로 추가 버튼을 누를 때, 새로 추가된 로우의 emp_empno 칼럼에서 값을 받아온 li_empno 값은 반드시 null이 되고 새로운 로우는 추가가 되지 않습니다.
If 구문 안에 또 If 구문을 사용했네요. 어떤 종류의 구문안에는 모든 종류의 구문이 포함될 수 있습니다.
수고하셨어요.
* 질문은 댓글에...
'파워빌더 기초강의1' 카테고리의 다른 글
파워빌더(PowerBuilder) 강의 - 25.GetItemString method (DataWindows) (6) | 2011.09.29 |
---|---|
파워빌더(PowerBuilder) 강의 - 24.SetItem method (DataWindows) (16) | 2011.09.27 |
파워빌더(PowerBuilder) 강의 - 22.InsertRow method (DataWindows) (15) | 2011.09.23 |
파워빌더(PowerBuilder) 강의 - 21.DWBuffer (DataWindow Buffer) (12) | 2011.09.23 |
파워빌더(PowerBuilder) 강의 - 20.DeleteRow method (DataWindows) (13) | 2011.09.20 |