[ 파워빌더.DataWindow - titlebar 존재 시 이동 금지  ]

 

 

데이터윈도우를 가끔 윈도우창처럼 titlebar 를 활성화해서 사용할때가 있습니다.

그렇게 되면 데이터윈도우 창이 마우스로 move가 가능하게 되는데요.

못움직이게 고정해버리는 방법입니다.

 

우선 datawindow의 이벤트를 새로 추가합니다.

( Event ID : pbm_syscommand 를 생성한 후 아래와 같이 스크립트 기재 )

 

Uint a
a = Message.WordParm
CHOOSE CASE a
 CASE 61456, 61458
  Message.Processed = True
  Message.ReturnValue = 0
END CHOOSE
RETURN

Posted by 농부지기
,

[ 파워빌더.DataWindow - 컬럼 Clpboard에 복사 ]

 

 

☞   

 

//Click 한 자료를 ClipBoard 로 카피
If Row > 0 and dwo.type = "column"  and Not(string(dwo.name) = 'datawindow' ) Then
       If Not IsNull(dwo.Primary[row]) Then ::Clipboard(String(dwo.Primary[row]))
End If

말 그대로 선택한 Column의 데이타를 Clipboard에 담는 Script 입니다. (Click! Event에서 사용하시면 되겠죠..)

Posted by 농부지기
,

[ 파워빌더.DataWindow -  Expression 활용하기 ]

 

 

expression 은 파워빌더에서 쿼리에서 못다한 혹은 쿼리가 약한 분들에게 많은 장점을 제공하기도 합니다.

동적으로 조건에 따라 여러가지 설정도 할 수 있구요.

 

그 중에서 설마 이런 곳에서도 될까? 하는 곳을 소개 시켜 드릴께요.

 

바로 sortgroup 결정할때 가능합니다.

그럼 filter도 되겠죠? 나머진 응용해서 함 찾아서 해보세요..

 

sort 를 선택하시면, 보통은 컬럼만 옮겨놓습니다.

그런데, 해당 컬럼을 클릭하면 다음과 같은 expression 화면이 나옵니다.

 

여기서 if 문 안에서 in 을 사용해도 되는 걸 눈치채신 분도 계시나요? ^^ (저도 그냥 써봤습니다. 되더군요..)

 

이와 더불어 group 지정 할때도 그냥 컬럼만 넣으셨나요?

마찬가지로 컬럼을 넣으신 후 expression을 지정하실 수 있어요

 

 

 

 

Posted by 농부지기
,

[ 파워빌더.DataWindow - 컬럼 Auto Height  ]

 

 

파워빌더 데이터윈도우에는 autosize height라는 게 있습니다.

각 밴드마다 살펴보시면 되구요.

 

기본적인 개념은 내용이 길어질 경우 자동으로 내용에 맞춰서 band 길이가 조정된다는 것입니다.

그래서 이 설정은 band의 설정과 하나이상의 컬럼 설정이 셋트가 됩니다.

 

먼저 detail 밴드에서 우측마우스 클릭하셔서 properties 를 선택하시면.. autosize height가 있습니다. 체크해 주세요.

 

 

다음은 내용이 가변적으로 들어가는 컬럼을 선택하세요.

그런 다음 해당 컬럼의 position 탭을 보시면. autosize height 가 있습니다. 체크하세요.

 

해당 컬럼의 edit 탭을 보시면.. 다음과 같은 속성들이 있는데... 우린 자동으로 height가 늘어나도록 할 것 이기 때문에..

자동으로 horz scroll 이 되도록 하면 안되겠죠? 그 부분은 체크가 안되도록 하셔야 합니다.

헷갈리면..다 없애는게 좋죠..^^

 

이렇게 하면..컬럼 속성이 모두 완료 되었습니다.

이젠 좀 더 나은 레포트를 위해서 옆에 선들이 있는데 이넘들도 같이 늘어나야 이쁘겠죠?

 

안했을 때 어떻게 되는지는 직접 해보세요.. ^^

우선.. 세로축 라인은 y2값만 같이 늘어나면 되니까..

position 탭에서 y2의 expression을 선택하셔서 다음과 같이 해주세요.

(값은 알아서 적당히 하세요..)

 

if(rowcount() = getrow(), rowheight() - 8, rowheight() + 4)

 

다음은 아래쪽에 있는 가로선에 대한 설정입니다.

가로선은 y1과 y2가 같은 설정이면 반듯하게 나오겠죠?

 

rowheight() - 4

 

자..이제 설정은 끝나구요.. 조회를 해봅니다.

그럼 내용에 따라 row들이 다른 높이로 나옵니다.

 

Posted by 농부지기
,

[ 파워빌더.DataWindow - 합계 컬럼  ]

  

 

☞   

 

합계칼럼을 일일이 손으로 만들고 있길래 ..

쉽게 합계 칼럼을 일괄 자동생성하는 법을 알려 줬지요..

(무지 좋아 하더군요...)

혹시 모르시는 분들을 위해.. 조금이라도 편하시라고.. 올려봅니다

 

1)dw의 숫자로 된 칼럼이 여러개 주욱 옆으로 있다면...

아래 그림과 같이 숫자칼럼들만 마우스로 멀티 선택합니다..

(과목수, 수강료총액, 차감총액, 실제 수강료합...)

 

2) 툴바에서 Sum을 선택하면 summary 칸에 합계 컴퓨티드 칼럼이 주르륵 자동 생성됩니다.

(리포트 만들거나 할때 숫자칼럼 많은데 합계 생성하려면 힘들고 귀찮죠... 이럴때 유용하겠죠..)

 

 

3) 그런데 summary 밴드가 아닌 footer 에 만들고 싶은데 거긴 자동 생성 안되네요..

tabular 나 freeform dw는 그냥 마우스로 드래그해서 밴드를 옮기면 되지만

그리드는 밴드 이동이 안되는 군요... 이론..

그럼 저장하고 나가서 해당 dw를 마우스 우클릭 한 다음.. Edit Source 를 선택합니다.

(파빌 7 이하는 edit source가 없군요.. 그럼 export, import 하면 되겠죠..)

 

4) source에서  band=summary 를  footer 로 바꾸고 저장합니다..

 

 

5) 아래 그림 처럼 summary 에서 footer로 합계칼럼이 생성되었습니다.... 파빌은 역시 짱입니다..

 

 

 

☞  

 

  

 

Posted by 농부지기
,

[파워빌더.DataWindow - 계산하기 ]  

 

 

☞   현재Row와 이전row 값을 비교 후 sum

 


1. summary 에 computed field 를 만들고
2. sum( if ( pum[-1] = pum[0] , 0 , value ) for all )
 

☞  

 

  데이터 윈도우의 sum() 함수 expression 에서 자주 사용하는데요..

for range 뒤에 distinct 를 붙일 수 있더군요... ;

그렇게 하니까 그룹내에서 중복으로 값이 더해지는 걸 예방할 수 있더군요.

 

참고로 first() 함수도 있더군요...

 

다음은 헬프의 내용입니다.

 

Description

Calculates the sum of the values in the specified column.

열거된 컬럼의 값을 합하여 계산한다.

 

Syntax

Sum ( column { FOR range { DISTINCT { expres1 {, expres2  {, ... } } } } } )

Argument

Description

column

The column for which you want the sum of the data values.

Column can be the column name or the column number

preceded by a pound sign (#).

Column can also be an expression that includes a reference to the column. The data type of column must be numeric.

컬럼 타입은 반드시 숫자형이여야 하고, 컬럼명이 와도 되고, 컬럼번호가 와도 된다. 또는 표현식도 가능하다.

FOR range

 (optional)

The data to be included in the sum. For most presentation styles, values for range are:

ALL (Default)

The sum of all values in column.

resultset에 있는 해당 컬럼의 모든 값의 합

GROUP n  

The sum of values in column in the specified group.

Specify the keyword GROUP followed by

the group number:

for example, GROUP 1.

특정 그룹에 속한 값의 합

sum( column_name for group 1)

PAGE

The sum of the values in column on a page.

한 페이지 내에 있는 컬럼의 값의 합

sum( column_name for page)

CROSSTAB

 (Crosstabs only)

The sum of all values in column in the crosstab.

크로스탭에서만 사용가능하다. 크로스탭의 컬럼의 값의 합

GRAPH

(Graphs only)

The sum of values in column in the range specified for the Rows option of the graph.

그래프 데이터윈도우에서만 사용가능하다.

OBJECT

(OLE objects only)

 The sum of values in column in the range specified for the Rows option of the OLE object.

OLE 에서만 사용가능하다.

 

DISTINCT (optional)

Causes Sum to consider only the distinct values in column when determining the sum. For a value of column, the first row found with the value is used and other rows that have the same value are ignored. 

합계를 구할 때 컬럼내에서 중복되는 값을 제거하여 합계를 구한다. 동일한 값이 존재할 때, 첫번째 row의 값만 가져오고, 다른 row의 동일한 값은 무시한다.       

expresn  (optional)

One or more expressions that you want to evaluate to determine distinct rows. Expresn can be the name of a column, a function, or an expression.

값을 계산하기 위해서 사용하는 하나 또는 여러개의 표현식 내용은 distinct 의 조건으로 사용된다. 표현식은 컬럼명이나 함수, 또는 수식등을 사용할 수 있다.

예) sum(  컬럼명 for all distinct 컬럼명이나 함수, 수식)

 

 

Return value

The appropriate numeric data type. Returns the sum of the data values in column.

 숫자형타입 중 알맞은 형태가 리턴된다. integer 는 interger, decimal은 decimal...머..이렇다는 말인가보다.

Usage

If you specify range, Sum returns the sum of the values in column within range. If you specify DISTINCT, Sum returns the sum of the distinct values in column, or if you specify expresn, the sum of the values of column where the value of expresn is distinct.

For graphs and OLE objects, you do not select the range when you call the function. The range has already been determined by the Rows setting on the Data property page (the Range property), and the aggregation function uses that range. Settings for Rows include:

 

-         For the Graph or OLE presentation style, Rows is always All.

-         For Graph controls, Rows can be All, Page, or Group.

-         For OLE controls, Rows can be All, Current Row, Page, or Group. The available choices depend on the layer the control occupies.

 

NULL values are ignored and are not included in the calculation.

Not in validation rules or filter expressions    You cannot use this or other aggregate functions in validation rules or filter expressions.

 

Using an aggregate function cancels the effect of setting Retrieve Rows As Needed in the painter. To do the aggregation, a DataWindow object or report always retrieves all rows.


http://cafe.naver.com/pentaeduclub.cafe

 

Posted by 농부지기
,

[ 파워빌더.DataWindow - 컬럼 내용에 따른 width 조절  ] 

 

 

☞   

 

XPlistBar 소스를 보는 도중에...발견했습니다.

 

한번 적용해 보세요..

Tahoma 8 포인트 일경우 인데요..

 

Ceiling(LenA( 컬럼명 ) / 5 * 135 )

 

뒤에 135 숫자를 적절히 조정해 보시기 바랍니다

Posted by 농부지기
,

[ 파워빌더.DataWindow - 컬럼순서 변경  ]

  

 


순순하게 변경은 불가능
전부 visible = false하시고
순서대로 visible을 true 하시면됩니다.

Posted by 농부지기
,

[ 파워빌더.DataWindow - 컬럼 속성 변경  ]

  

☞   

 

1. BackGroundColor 변경  : dw_d1.Modify("컬럼명.Background.Color = '16777215'") //rgb(255,255,255)'")

2. lable 의   Text  변경 : dw_d1.Modify("title_game_header.Text = '원하는 값'")

3. 컬럼 type length 변경 : dw_d1.Modify("컬럼명.Edit.Limit = 5")

4. 컬럼 Visible     처리 : dw_d1.Modify("컬럼명.Visible = true")

5. 컬럼 bold 굵게 설정   : dw_d1.Modify ("컬럼명.font.Weight=700") ;   //700은 굵게,   400은 보통

6. 컬럼 Y 좌료    설정   : dw_d1.Modify("컬럼명.Ya = 500")

7. 컬럼 X 좌료    설정   : dw_d1.Modify("컬럼명.X = 500")

8. 컬럼 높이      설정   : dw_d1.Modify ("컬럼명.Height = 80")

9. This.SelectText(1, len(GetText() )

☞  

 

1. dw안에 컬럼 개수          : ll_col_cnt = Integer(dw_d1.Describe("datawindow.column.count"))

2. 컬럼 index 로 컬럼명 찾기 : ls_col_name = Upper(dw_d1.Describe ( "#"+String ( li_index ) + ".Name" ))

3. 컬럼 type 알아내기        : ls_type = dw_d1.Describe("컬럼명.ColType");

4. 컬럼 tag 값 얻기          : ls_tag  = dw_d1.Describe ( "#컬럼명.Tag" )

5. 컬럼 X 좌표 값 얻기       : X = Integer(dw_d1.Describe ( "컬럼명.X" ))

6. 컬럼 Y 좌표 값 얻기       : Y = Integer(dw_d1.Describe ( "컬럼명.Y" ))

☞  

 

컬럼 순서 알아 내기 : dw_d1.Object.DataWindows.Table.GridColumns

 


1. text lable에 값을 두 줄로 만들 기 : 한글~r한글 : 즉 ~r  를 삽입
2. 두 번째 방법으로 : text입력란에서 Ctrl + Enter를 치면 밑으로 내려감

 


1. EditMast.Mask 변경하기
   dw_d1.Object.part_rope_cnt.EditMask.Mask = "###";
   dw_d1.Object.part_rope_cnt.EditMask.Mask = "##.000";

2. Format 변경하기
   dw_d1.Object.part_rope_cnt_1.format = '##.000'
   dw_d1.Modify("part_rope_cnt_.format='##.000'");   //문자값은  Modify내부에  single quote 를 찍어야 됨
 
3. 컬럼 height 변경하기
   dw_d1.Modify ("part_cd.Height         = 80")

 

1. tabOrder 속성 변경
   dw_d1.SetTabOrder("part_rope_cnt", 20)

 


1. Detail band Height 조정하기
   dw_d1.SetDetailHeight (1, 99, 102)

 

해당 데이터윈도우의 Scrollvertical() 이벤트에 아래와 같이 스크립트를 기술해 주시면 됩니다.

===================================================================================

String ls_first, ls_last

String ls_page, ls_pagecount

// 각 화면의 첫번째 Row의 번호를 얻는다.

ls_first = dw_1.Object.Datawindow.FirstRowOnPage

// 각 화면의 마지막 Row의 번호를 얻는다.

ls_last  = dw_1.Object.Datawindow.LastRowOnPage

dw_1.Title = "Rows " + ls_first + " To " + ls_last

ls_page = dw_1.Describe("Evaluate('Page()'," + ls_last + ")")

// 전체 Page수를 얻는다.

ls_pagecount = dw_1.Describe("Evaluate('PageCount()'," + ls_last + ")")

st_page.text = "총 " + ls_pagecount + " 페이지중 " + ls_page + " 페이지"

 

 

dw_1.object.Data[row, 컬럼번호]

dw_1.object.컬럼.Primary.Current[row]

dw_1.object.컬럼.Primary[row]

그외....

해당 데이터윈도우 버퍼의 데이터를 모두 받는 건?

dw_1.object.data

 

두번째 행의 모든 값을 받는 건?

dw_1.object.data[2]

 

1행의 첫컬럼부터 2행의 두번째 컬럼까지 받는 건?

dw_1.object.data[1,1, 2, 2]

 

selectrow()함수를 이용해서 선택된 행을 모두 갖고 오는 건?

dw_1.object.Data.Selected

 

모든 행의 특정컬럼 값만 갖고 오는 거?

dw_1.object.컬럼
http://cafe.naver.com/pentaeduclub.cafe

 


DataWindow에서 값을 입력하다보면 'DataWinodw Error'라는 Title의 Message Box가 나타남
영어로 쓰여져있고 일반 End User들에게는 생소한 영문이라서 눈에 거슬렸는데
이 title을 원하시는 내용으로 변경하는 방법이 있다.
DataWindow attribute에는 Message.Title이란 것이 있다.
이부분을 수정하면 된다.
  dw_1.Modify("DataWindow.Mesage.Title = '입력오류'")
 

 

- Original : 초기 조회 값
IF ( column_name <>
column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0))

 

Posted by 농부지기
,