Une grille de curseur est vide si la commande SELECT-SQL réinitialise le curseur dans Visual FoxPro


Symptômes


Dans Microsoft Visual FoxPro, si la propriété RecordSource d’une grille est réglée sur un curseur, et la commande SELECT-SQL réinitialise le curseur, la grille est vide si la
Propriété RecordSource n'est pas redéfinie à lui-même.


La commande suivante actualiser la grille correctement si un SELECT-SQL est exécutée pour reconstruire le curseur, mais si les propriétés d’en-tête ou de la colonne de la grille ont été personnalisées, ces modifications personnalisées seront perdues et les propriétés de colonne et l’en-tête de la grille change les paramètres par défaut :
   THISFORM.GRID1.RECORDSOURCE=THISFORM.GRID1.RECORDSOURCE
Cette personnalisation pourrait être en-têtes avec des noms différents, plus des longueurs de colonne et le code écrit dans les événements, des colonnes ou des en-têtes. Pour plus d’informations, consultez l’article suivant dans la Base de connaissances Microsoft :
131836 PRB : grille n’actualise ne pas l’affichage d’un curseur à partir de la requête

Cause


Lorsque vous reconstruisez le curseur basé sur la grille avec la commande SELECT-SQL, le curseur d’origine doit être détruit avant que le nouveau curseur peut être créé. Dans ce cas, les colonnes de la grille et les en-têtes sont également effacés et puis recréés. Même lorsque la propriété RecordSource de la grille est redéfinie à lui-même, les paramètres personnalisés des colonnes et des en-têtes de la grille sont perdues.

Résolution


Pour actualiser la grille sans perdre les propriétés personnalisées des colonnes et des en-têtes, définir la propriété à un curseur factice qui a déjà été créé avec les mêmes champs que le curseur de la grille est basée sur la source d’enregistrement. Après l’exécution du SELECT-SQL, modifier la propriété RecordSource sur le curseur reconstruit. Ainsi, les propriétés des colonnes et des en-têtes sont conservés pendant que le curseur est en cours de reconstruction.

État


Ce comportement est voulu par la conception.

Plus d'informations


Procédure pour reproduire le comportement

  1. Ouvrez la table Customer.dbf située dans le répertoire \Vfp\Samples\Data et créez un formulaire nommé GridForm.
  2. Placez le code suivant dans l’événement Load du formulaire :
       SELECT cust_id, city, country FROM customer INTO CURSOR Temp1
    SELECT cust_id, city, country FROM customer WHERE country = "" ;
    INTO CURSOR Temp2
  3. Placez le code suivant dans l’événement de destruction du formulaire :
       SELECT Temp1
    USE
    SELECT Temp2
    USE
  4. Placer une grille sur le formulaire et attribuer à la grille les paramètres de propriété suivants :
       ColumnCount=3
    RecordSourceType=Alias
    RecordSource=Temp1
  5. Modifier la légende de la grid1. Column1.Header1 Id de client et de la propriété de largeur de Colonne1 à 100.
  6. Ajouter une zone de texte à l’écran.
  7. Ajoutez un bouton de commande et placez le code suivant dans son événement 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. Exécutez le formulaire. Tapez Espagne dans la zone de texte, puis cliquez sur le bouton de commande. La grille doit afficher tous les enregistrements où le champ pays est égal à l’Espagne. Notez que le nom de l’en-tête de la colonne 1 reste la même et ne modifie pas la largeur de la colonne. En modifiant la source d’enregistrement de la grille pour le curseur appelé Temp2, les propriétés des colonnes et des en-têtes ne sont pas réinitialisées lorsque le curseur de l’utilisateur Temp1 est reconstruit.
  9. Modifier les deux THISFORM. GRID1. Les lignes de source de l’événement Click de la commande bouton dans les commentaires et ajoutez ce qui suit la dernière ligne de code :
       THISFORM.GRID1.RECORDSOURCE = THISFORM.GRID1.RECORDSOURCE
    Après l’exécution de l’écran, la taper un nom de pays dans la zone de texte et en cliquant sur le bouton de commande, notent que les modifications de nom de colonne et de la largeur est plus petite.