Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Array in grid
Message
 
 
À
01/08/2008 11:00:48
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:
01352334
Vues:
23
I guess it would be nice to be able to see multiple arrays in different windows (e.g. create different name for the cursor).

>>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))
>
>
If it's not broken, fix it until it is.


My Blog
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform