Populate Listview from a cursor customized
* Put that code in Listview.INIT
THIS.View= 3 && lvwReport
this.gridLines= .T.
this.fullRowSelect= .T.
this.BorderStyle= 0
&& ccNone
lcHeaderT = "Head1;Head2;Head3;Head4;Head5"
lcHeaderW
= "30;60;60;60;100"
lcHeaderA
= "0;1;2;0;0" && 0 Left,1 Right, 2 Center
lcFields
= "FieldName1;FieldName2;FieldName3;FieldName4;FieldName5"
lnFldcnt = 5 &&FCOUNT(cALIAS)+1
cALIAS = 'Table'
LOCAL I,lnHeaderWidth
FOR I = 1 TO lnFldcnt
lcHeaderText =
GETWORDNUM(lcHeaderT,I,";")
lcHeaderWidth = VAL(GETWORDNUM(lcHeaderW,I,";"))
lcHeaderAlign = VAL(GETWORDNUM(lcHeaderA,I,";"))
THIS.ColumnHeaders.Add(, ,lcHeaderText,lcHeaderWidth ,lcHeaderAlign,0)
NEXT I
DECLARE INTEGER LockWindowUpdate IN user32 INTEGER
hWndLock
v = LockWindowUpdate(THIS.hWnd)
this.Enabled= .F.
**** PUT DATA IN LISTVIEW
SELECT &cALIAS
SCAN
**** EVALUATE FIRST
ITEM
lcFieldName1 =
GETWORDNUM(lcFields,1,";") &&FIELD(1)
lcFieldValue = EVALUATE(lcFieldName1)
DO CASE
CASE TYPE("lcFieldValue")="N"
lcFieldValue = ALLTRIM(STR(lcFieldValue))
CASE TYPE("lcFieldValue")="G"
lcFieldValue =
"Gen"
CASE TYPE("lcFieldValue")="C" OR TYPE("lcFieldValue")="M"
lcFieldValue = ALLTRIM(lcFieldValue)
CASE TYPE("lcFieldValue")="D"
lcFieldValue = DTOC(lcFieldValue)
CASE TYPE("lcFieldValue")="L"
lcFieldValue = IIF(lcFieldValue = .T.,"Y","N")
ENDCASE
loListItem = this.ListItems.Add(,,AllTrim(lcFieldValue),,)
**** EVALUATE
REST ITEMS
FOR J = 2
TO lnFldcnt
lcFieldName = GETWORDNUM(lcFields,J,";") &&FIELD(j)
lcFieldValue = EVALUATE(lcFieldName)
DO CASE
CASE TYPE("lcFieldValue")="N"
lcFieldValue = ALLTRIM(STR(lcFieldValue))
CASE TYPE("lcFieldValue")="G"
lcFieldValue = "Gen"
CASE TYPE("lcFieldValue")="C" OR TYPE("lcFieldValue")="M"
lcFieldValue = ALLTRIM(lcFieldValue)
CASE TYPE("lcFieldValue")="D"
lcFieldValue = DTOC(lcFieldValue)
CASE TYPE("lcFieldValue")="L"
lcFieldValue = IIF(&lcFieldValue=.t.,"Y","N")
ENDCASE
loListItem.subitems(J-1)=ALLTRIM(lcFieldValue)
NEXT J
ENDSCAN
v = LockWindowUpdate(0)
this.Enabled= .T.
DECLARE INTEGER SendMessage IN user32;
INTEGER
hWnd,;
INTEGER Msg,;
INTEGER wParam,;
INTEGER lParam
SET_COLUMN_WIDTH = 4126
AUTOSIZE_USEHEADER = -2
loListViewCC = This.ColumnHeaders.Count
ctrlHwnc = This.hWnd
FOR I = 0 TO loListViewCC - 1
=
SendMessage(This.hWnd , SET_COLUMN_WIDTH, I,@AUTOSIZE_USEHEADER)
NEXT I