Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Array in grid
Message
De
02/10/2008 13:54:52
 
 
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:
01352342
Vues:
21
The code is there, you're free to modify it. :-)

>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))
>>
>>
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform