Una griglia basata su cursore è vuota se il comando SELECT-SQL reimposta il cursore in Visual FoxPro
Questo articolo consente di risolvere il problema in cui la griglia basata su cursore è vuota se il comando SELECT-SQL reimposta il cursore in Visual FoxPro.
Versione originale del prodotto: Visual FoxPro
Numero KB originale: 140653
Sintomi
In Microsoft Visual FoxPro, se la RecordSource
proprietà di una griglia è impostata su un cursore e quindi il comando SELECT-SQL reimposta il cursore, la griglia viene visualizzata vuota se la proprietà RecordSource non è impostata su se stessa.
Il comando seguente aggiorna correttamente la griglia se viene eseguito UN SELECT-SQL per ricompilare il cursore, ma se le proprietà della colonna o dell'intestazione della griglia sono state personalizzate, queste modifiche personalizzate andranno perse e le proprietà della colonna e dell'intestazione della griglia torneranno alle impostazioni predefinite:The following command will refresh the grid properly if a SELECT-SQL is run to rebuild the cursor, but if the column or header properties of the grid been customized, these customized changes will be lost and the column and header properties of the grid will change back to their default settings:
THISFORM.GRID1.RECORDSOURCE=THISFORM.GRID1.RECORDSOURCE
Tale personalizzazione può essere costituita da intestazioni con nomi diversi, lunghezze di colonna più lunghe e codice inserito negli eventi di colonne o intestazioni. Per altre informazioni, vedere l'articolo seguente nella Microsoft Knowledge Base: 131836 PRB: Grid Not Refreshing Displaying a Cursor from Query
Causa
Quando si ricompila il cursore su cui si basa la griglia con il comando SELECT-SQL, il cursore originale deve essere eliminato prima di poter creare il nuovo cursore. In questo caso, anche le colonne e le intestazioni della griglia vengono cancellate e quindi ricreate. Anche quando la RecordSource
proprietà della griglia viene impostata di nuovo su se stessa, le impostazioni personalizzate delle colonne e delle intestazioni della griglia vanno perse.
Risoluzione
Per aggiornare la griglia senza perdere le proprietà personalizzate delle colonne e delle intestazioni, impostare la RecordSource
proprietà su un cursore fittizio già creato con gli stessi campi del cursore su cui si basa la griglia. Dopo l'esecuzione di SELECT-SQL, modificare nuovamente la RecordSource
proprietà con il cursore ricompilo. In questo modo le proprietà delle colonne e delle intestazioni rimangono invariate mentre il cursore viene ricompilati.
Stato
Si tratta di un comportamento legato alla progettazione del prodotto.
Altre informazioni sui passaggi per riprodurre il comportamento
Aprire la tabella Customer.dbf nella directory \Vfp\Samples\Data e creare un modulo denominato GridForm.
Inserire il codice seguente nell'evento Load del modulo:
SELECT cust_id, city, country FROM customer INTO CURSOR Temp1 SELECT cust_id, city, country FROM customer WHERE country = "" ; INTO CURSOR Temp2
Inserire il codice seguente nell'evento Destroy del modulo:
SELECT Temp1 USE SELECT Temp2 USE
Posizionare una griglia nel modulo e assegnare alla griglia le impostazioni delle proprietà seguenti:
ColumnCount=3 RecordSourceType=Alias RecordSource=Temp1
Modificare la didascalia della griglia1. Da Column1.header1 a Id cliente e la proprietà Width column1 a 100.
Aggiungere una casella di testo al modulo.
Aggiungere un pulsante di comando e inserire il codice seguente nell'evento Click:
THISFORM.GRID1.RECORDSOURCE = "Temp2" SELECT cust_id, city, country FROM customer ; WHERE country = Thisform.text1.value ; INTO CURSOR Temp1 THISFORM.GRID1.RECORDSOURCE = "Temp1"
Eseguire il modulo. Digitare Spagna nella casella di testo e quindi fare clic sul pulsante di comando. Nella griglia dovrebbero essere visualizzati tutti i record in cui il campo paese è uguale alla Spagna. Il nome dell'intestazione della colonna 1 rimane invariato e la larghezza della colonna non cambia. Modificando l'oggetto RecordSource della griglia sul cursore denominato Temp2, le proprietà delle colonne e delle intestazioni non vengono reimpostate quando il cursore Temp1 viene ricompilati.
Modificare le due
THISFORM.GRID1.RECORDSOURCE
righe nell'evento Click del pulsante di comando in commenti e aggiungere quanto segue come ultima riga di codice:THISFORM.GRID1.RECORDSOURCE = THISFORM.GRID1.RECORDSOURCE
Dopo aver eseguito il modulo, digitare un nome di paese nella casella di testo e fare clic sul pulsante di comando, notare che il nome della colonna cambia e la larghezza è inferiore.