IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Comment récupérer une case d'un dbGrid ?


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 72
    Par défaut Comment récupérer une case d'un dbGrid ?
    Bonjour,
    Voila j'ai un souci simple a comprendre, mais apparement pas si logique que ca à trouver une soluce.

    J'ai un composant DBGrid, je n'arrive pas a récupérer le contenu d'une cellule au moment ou je l'utilisateur tape enter... E oui C pas un TStringGrid



    Merci.

  2. #2
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut

    C'est possible si la cellule dont tu veux récupérer le contenu est située sur la ligne courante (celle mise en évidence dans la grille).

    Si oui, tu veux la suite, dis?

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 72
    Par défaut
    oui je veux bien merci.

  4. #4
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut
    Bonjour,
    Un composant DBGRid ne contient aucune donnée

    voilà ceci étant dit, on peut continuer
    Tu ne cherches donc pas à récupérer une "case" de DBGrid, mais bien un champ d'un enregistrement du Dataset dont les données sont affichées dans ton DBGrid.

    Par exemple si ton DBGrid n'affiche pas toujours le même dataset :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Showmessage(DBGrid1.datasource.dataset.fieldbyname('prenom').asstring);
    N'hésite pas si tu as d'autre Suchi !

  5. #5
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Pour info, sur le principe, il ne faut pas chercher à contrôler les données saisies au niveau des contrôles orientés données, puisqu'en principe, il ne sont qu'observateurs des données auquelles ils sont branchés, et qu'ils ne les contiennent donc pas (en principe... ).

    Je te conseille donc d'utiliser plutôt les évènements OnValidate, ou OnChange des TFields, ou encore de faire ce que tu as à faire sur le before ou after post du dataset.

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 72
    Par défaut
    Merci Sylvain mais en fait, il n'est pas encore ds le data source, c'est avt...

  7. #7
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Après avoir actionné la touche F1 avec une fébrilité non dissimulée :
    Désigne le composant champ correspondant à la cellule sélectionnée de la grille.

    property SelectedField: TField;

    Description

    Affectez une valeur à la propriété SelectedField pour déplacer la focalisation sur un champ donné de la grille. Consultez SelectedField afin d'avoir accès au composant champ de la cellule sélectionnée. S'il n'y a pas de cellule sélectionnée en cours, SelectedField contient nil. Par exemple, quand une ligne entière est sélectionnée, SelectedField contient nil.
    Bon, d'accord il fallait le savoir et j'aime bien faire le fanfaron ;-)

    Attention néanmoins à l'option dgRowSelect du DBGrid qui si elle est positionnée nuit peut-être à l'utilisation de SelectedField (à vérifier), ceci dit si cette option est active, comment trouver la cellule en cours du fait que la ligne complète est sélectionné (me suis-je bien fait comprendre ?)

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 72
    Par défaut
    et bien oui, Ca serait une bonne idée DMO, mais le TField est dynamique...

    Je pense pas pouvoir rajouter un évènement comme ca... C pa moi qui crée les TFields...

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 72
    Par défaut
    Eric,
    En fait, ca, c'est valable, une fois que ca a été saisi ds la base.
    Mais moi, je veux ce qu'on a ds la cellule avt que ca ait été ds la base


  10. #10
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut
    Citation Envoyé par jeje.r
    Merci Sylvain mais en fait, il n'est pas encore ds le data source, c'est avt...
    Gnii ?

    Même si tu es en mode édition et pas validé tu devrais pouvoir lire les champs d'un Dataset non ?

    Ah tiens j'ai pensé à un truc bête :
    Pourquoi tu veux faire ça ? Peut-être qu'il y a une autre méthode pour arriver à tes fins !

  11. #11
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Je ne saisis pas :
    Citation Envoyé par jeje.r
    le TField est dynamique
    OnValidate et OnChange sont des évènements déjà présents dans la classe TField, je ne vois pas pourquoi tu veux
    Citation Envoyé par jeje.r
    rajouter un évènement comme ca
    Ils existent et sont prêts à être utilisés. Après ils ne se produisent peut-être pas exactement quand tu le souhaites, mais c'est un autre problème.

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 72
    Par défaut
    En fait le champ n'est pas créé DMO, ds le dataset (a la grille), y'a pas de champ associé.

    dc je vois pas comment accéder a onvalidate si j'ai pas créé de champ

  13. #13
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Ah ok. Tu me dis que les fields ne sont pas ajoutés au dataset (en utilisant l'editeur), et que donc tu n'y as pas accès en conception pour te brancher sur leurs évènements. Ok.

    Delphi les crée néanmoins ces TFields. Tu peux les retrouver par le code avec "FieldByName" ou "Fields" par exemple, et en code brancher à celui ou ceux qui t'interesse(nt) des méthodes à leurs évènements juste après avoir ouvert le dataset.

  14. #14
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 72
    Par défaut
    OK Merci DMO, mais je fais comment pour lier onvalidate avec ma procédure?

  15. #15
    DMO
    DMO est déconnecté
    Membre chevronné
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Par défaut
    Avec une procédure de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure ValidateToto(Sender: TField);
    Si je ne m'abuse (j'ai pas testé), tu peux faire suite à l'ouverture du dataset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.FieldByName('toto').OnValidate := ValidateToto;
    Autre piste, tu peux sur le BeforePost du dataset déclencher une exception silencieuse , ou une autre non silencieuse (histoire d'informer l'utilisateur), au cas où les données saisies par l'utilisateur ne te conviennent pas. Cela annulera le post.

    Bon courage.

Discussions similaires

  1. Comment récupérer la valeur d'un dbGrid dans des fenêtres MDI ?
    Par sylvie cl dans le forum Composants VCL
    Réponses: 5
    Dernier message: 19/07/2005, 13h42
  2. Réponses: 10
    Dernier message: 01/06/2005, 11h30
  3. [JTable] comment colorer une case
    Par cladsam dans le forum Composants
    Réponses: 12
    Dernier message: 20/01/2005, 08h14
  4. Accès à une case d'un DBGrid dans l'event OnKeyDown
    Par fba dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/03/2004, 12h48
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo