Condividi tramite


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

  1. Aprire la tabella Customer.dbf nella directory \Vfp\Samples\Data e creare un modulo denominato GridForm.

  2. 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
    
  3. Inserire il codice seguente nell'evento Destroy del modulo:

     SELECT Temp1
     USE
     SELECT Temp2
     USE
    
  4. Posizionare una griglia nel modulo e assegnare alla griglia le impostazioni delle proprietà seguenti:

     ColumnCount=3
     RecordSourceType=Alias
     RecordSource=Temp1
    
  5. Modificare la didascalia della griglia1. Da Column1.header1 a Id cliente e la proprietà Width column1 a 100.

  6. Aggiungere una casella di testo al modulo.

  7. 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"
    
  8. 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.

  9. 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.