[ 파워빌더.ListView - 기본 ]

 

☞   

 

오브젝트 하나 만들어 달라고 해서 만들면서 만든 함수 하나 소개 할까 합니다.

DW를 그리지 않고 DS 와 ListView를 이용하여 SQL Select 를 실행하고 결과를 보여주기 입니다.

필요없다고 생각하지 마시고 파빌을 이렇게도 사용가능하구나 하고 너그럽게...

///--------------------------------------------------------------------------------------

// long of_autolistview( listview alv_list, string as_SQL, transaction atrans )

// 반환값 : 행 갯수

// 전달값 1 : 보여질 ListView

// 전달값 2 : SQL 스크립트

// 전달값 3 : 트렌젝션
DataStore lds
Long      row, rowcnt, lpos
String    ls_tmp, ls_SQL, ls_column[], ls_DWsyntax, ls_ColType
Integer   i, li_Item
Any       la_data[]

as_sql = Upper( as_sql )
// Select 문인지 검사한다.
lpos = Pos(as_sql,'SELECT')
ls_SQL = Trim( Upper(Mid(as_sql, lpos, Len('SELECT') )) )
if ls_SQL <> Upper('SELECT') then Return 0
// 컬럼의 갯수를 파악한다.
lpos   = Pos(as_sql,'SELECT')
ls_SQL = Upper(Mid(as_sql, lpos + Len('SELECT') ))
ls_SQL = Left(ls_SQL, Pos(ls_SQL, 'FROM') - 1 )
ls_SQL = Trim(ls_SQL) + ','
lpos = Pos(ls_SQL, ',')
i = 0
Do While lpos > 0
 ls_tmp = ''
 ls_tmp = Left( ls_SQL, lpos - 1 )
 ls_SQL = Mid( ls_SQL, lpos + 1 )
 if Not ( Trim(ls_tmp) = '' or IsNull(ls_tmp) ) then
  i ++
  ls_column[i] = ls_tmp
 end if
 lpos = Pos(ls_SQL, ',')
Loop
// ListView를 컬럼 형식으로 조정한다.
alv_list.View = listviewreport! // List형식으로
alv_list.SortType = UnSorted!   // 정렬하지 않음
alv_list.ButtonHeader = true    // 제목을 버튼으로
alv_list.Hideselection = false  // 선택 사용
alv_list.FullRowSelect = true   // 행선택 사용
alv_list.FaceName = '굴림'
alv_list.TextSize = 12
// 파악한 컬럼을 가지고 ListView 컬럼을 만들과 변수를 초기화 한다.
For i = 1 to UpperBound(ls_column)
 alv_list.AddColumn(ls_column[i], Left! , 800)
 la_data[i] = ''
Next
// 자료를 조회 한다.
lds = Create DataStore
ls_SQL = as_sql
ls_DWsyntax = atrans.SyntaxFromSQL(ls_SQL, "style(type=grid)", ls_SQL)
lds.Create ( ls_DWsyntax )
lds.SetTransObject( atrans )
rowcnt = lds.Retrieve()

// 조회된 값을 넣는다.

alv_list.SetRedraw(false)

alv_list.DeleteItems()
for row = 1 to rowcnt

 for i = 1 to UpperBound(ls_column)
  // Column Type 에 따른 값읽기
  ls_ColType = Lower ( ls_column[i]+'.ColType' )
  ls_ColType = lds.describe(ls_ColType)
  if Pos(ls_ColType,'(') > 0 then
   ls_ColType = Left(ls_ColType, Pos(ls_ColType,'(') - 1)
  end if
  choose case ls_ColType
   case 'decimal' ;la_data[i] = lds.GetItemDecimal (row,i)
   case 'char'  ;la_data[i] = lds.GetItemString  (row,i)
   case 'date'  ;la_data[i] = lds.GetItemDate    (row,i)
   case 'time'  ;la_data[i] = lds.GetItemTime    (row,i)
   case 'datetime';la_data[i] = lds.GetItemDateTime(row,i)
   case else  ;la_data[i] = lds.GetItemNumber  (row,i)  //'number', 'long', 'real'
  end choose
  if i = 1 then
   // 첫컬럼이면 행추가
   li_Item = alv_list.AddItem(String(la_data[i]), 1)
  else
   alv_list.SetItem(li_Item, i, String(la_data[i]))
  end if
 Next
next

alv_list.SetRedraw(true)
DESTROY lds

return rowcnt

 

Posted by 농부지기
,