Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Array in grid
Message
De
01/08/2008 11:00:48
 
 
À
01/08/2008 10:50:41
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Titre:
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows XP SP2
Network:
Windows XP
Database:
MS SQL Server
Divers
Thread ID:
01335805
Message ID:
01335813
Vues:
15
>Hi All,
>
>Is it possible to use an array as a recordsource in a grid?
>If so, how would I go about doing that?
>
>Thanks,
>Luke

No, but you can convert the array into a cursor. This code is borrowed from Sergey
*
* Name	 : Array Browser
*		 : This is a development tool that allows to view an array in the Browse window
*
* Note 1 : The colum Name format : <T>_<C>_<L>
*			T - Column type, V if there are diff types of values in the column
*			C - Column Number
*			L - Max len requered to represent value in this column. 
*				Add only in the columns with data types of variable size.
*
* Note 2 : The BrowseArrayCursor cursor isn't closed to allow BROWSE NOWAIT
*
* Author : Sergey Berezniker    
*		 : Version 1.0.12    07/26/2007
* Email  : sergeyber@gmail.com
*		 : This program is placed into Public domain. Comments and suggestions are welcome.
*
* Change : 19.03.2002 by Daniel Gramunt: Optional parameter < tcCaption > added
*          03/19/2002 by --SB-- : Modified the BROWSE command to display in the desktop.
*          04/24/2002 by --SB-- : Fixed problem with the objects in the array.
*          04/25/2002 by --SB-- : The size isn't added to the column name with fixed size data types in it
*          07/26/2007 by --SB-- : Fixed bug with SET FIXED ON reported by Agnes Beste on UT
LPARAMETER taArray, tcCaption

LOCAL lcTalkOld, lcOldArea, lcFixedOld
LOCAL lnRows, lnCols, lnI, lnJ, lcType, lnSize, ll1d, lnDec, lcRow, llAddSize, lvValue, laStru[1], lcCaption
lcTalkOld = SET("TALK")
SET TALK OFF
lcFixedOld = SET("Fixed")
SET FIXED OFF

lcOldArea = SELECT()

* Make sure that parameter passed is an array
IF TYPE("taArray[1]") = "U"
	MessageBox("Please pass array by reference!", 48, PROGRAM() + " - Array Browser")
	SET TALK &lcTalkOld
	RETURN .F.
ENDIF

lcCaption = IIF(TYPE("tcCaption")="C" AND NOT EMPTY(tcCaption),;
                tcCaption, "BrowseArrayCursor" )

* Makes a cursor out of a one or two-dimensional array and browses it

* Controls if the MAX size of the value in the column is added 
*	to the column name
llAddSize = .T.

* Figure out the size of an array
lnRows = ALEN(taArray,1)
lnCols = MAX( ALEN(taArray,2), 1 )
ll1d   = (lnCols = 1)		&& Is array 1D?
DIMENSION laStru(lnCols+1, 16)
lcRow  = ""
laStru = ""

* Create an array with cursor structure definition

FOR lnI = 1 TO lnCols
	lcCol = Transform(lnI)
	lvValue = taArray( 1, lni )
	laStru[ lnI, 1 ] = VARTYPE(lvValue )
	laStru[ lnI, 2 ] = "C"
	lnSize = 1
	FOR lnJ = 1 TO lnRows
		IF ll1d
			lvValue = taArray( lnJ )
		ELSE
			lvValue = taArray( lnJ, lnI )
		ENDIF	
		IF laStru[ lnI, 1 ] <> TYPE( "lvValue" )
			laStru[ lnI, 1 ] = "V"
		ENDIF
		* --sb--  04/24/2002  -- Fixed a problem with an object in array element
		lnSize = MAX( lnSize, LEN( B_R_Transform( lvValue)))
	ENDFOR

	laStru[ lnI, 1 ] = laStru[ lnI, 1 ] + "_" + lcCol
	* --sb--  04/25/2002  -- Don't add size if it's fixed for that data type
	IF llAddSize AND NOT Inlist(Left(laStru[ lnI, 1],1), "L", "D", "I", "T", "O", "G")
		laStru[ lnI, 1 ] = laStru[ lnI, 1 ] + "_" + Transform(lnSize)
	ENDIF	
	
	lnSize = MIN( 254, lnSize)
	
	laStru[ lnI, 3 ] = lnSize
	laStru[ lnI, 4 ] = 0
	laStru[ lnI, 5 ] = .F.
	laStru[ lnI, 6 ] = .F.

	* Create "insert into" values clause
	* --sb--  04/24/2002  -- Fixed problem with an object in array element
	lcRow = lcRow + IIF(EMPTY( lcRow ), "", ", ") + ;
			"B_R_Transform( taArray[lnI" + IIF(ll1d, "", "," +lcCol) + "] )"
	
ENDFOR

lnI = ALEN(laStru,1)
laStru[ lnI, 1 ] = "Row_______"
laStru[ lnI, 2 ] = "N"
laStru[ lnI, 3 ] = 7
laStru[ lnI, 4 ] = 0
laStru[ lnI, 5 ] = .F.
laStru[ lnI, 6 ] = .F.

lcRow = lcRow + ", 0"

* Make a cursor with fields defined by laStru
CREATE CURSOR BrowseArrayCursor FROM ARRAY laStru

* Add rows into cursor
FOR lnI = 1 TO lnRows
	INSERT INTO BrowseArrayCursor VALUES ( &lcRow )
ENDFOR
REPLACE ALL Row_______ WITH RECNO()

GO TOP

*KEYBOARD "{CTRL+F10}" CLEAR

BROWSE NOWAIT IN SCREEN NORMAL TITLE (lcCaption)

SELECT (lcOldArea)
SET FIXED &lcFixedOld
SET TALK &lcTalkOld

RETURN
*-------------------------------------------------------
* Function returns "(Obj)" if the passed value is an object 
*	otherwise it works like Transform() w/o 2nd parameter
FUNCTION B_R_Transform(tvVal)
RETURN Iif(Vartype(tvVal)="O", "(Obj)", Transform(tvVal))
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform