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 :

DBGRID maléable ou pas?


Sujet :

Composants VCL Delphi

  1. #1
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut DBGRID maléable ou pas?
    bonjour a tous,
    depuis des heures je cherche faire quelque chose avec un dbgrid mais je ne c'est pas deja si possible de le manipuler genre supprimer une ligne de l'affichage

    est ce que quelqu'un peut me dire par exemple comment accéder a une ligne et récupérer les champs qui s'y trouvent

    merci

  2. #2
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Un DbGrid affiche juste les données. Les données se trouvent normalement dans le Dataset qui lui est rattaché via un DataSource.
    Quand tu clique sur une ligne du DbGrid, les informations de cette ligne devient l'enregistrement courant dans le Dataset; il suffit donc de récupérer les enregistrements via leur champs associé par ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    aClientNum     := monGridClient.DataSource.Dataset.FieldByName('CLI_NUM').AsInteger;
    aClientIntitule :=  monGridClient.DataSource.Dataset.FieldByName('CLI_INTITULE').AsString;
    aClientActif := monGridClient.DataSource.Dataset.FieldByName('CLI_ACTIVE').AsBoolean;
    Donc partant de ce principe; tu peux modifier/inserer/Supprimer l'enregistrement courant.
    Voilà.
    On progresse .....

  3. #3
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    et comment puis je faire cette récupération ligne aprés ligne et d'aprés le deuxiéme champ de chaque ligne je supprime ou non cette ligne de l'affichage du dbgrid

    encore merci a vous

  4. #4
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    Bonjour,

    comme l'a dis Andry, la DBGrid ne fait qu'afficher. Il faut travailler sur le dataset en utilisant les méthode first, next et eof pour naviguer d'un enregistrement à l'autre. Ensuite en fonction de la valeur du champs tu fais un delete ou pas. Le DBGrid se rafraichira avec les bonnes valeurs.

    @++
    Dany

  5. #5
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    j'ai saisi alors je ne peut pas supprimer l'enregistrement de l'affichage je le supprime tout court de ma table? c'est ca?

  6. #6
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    Citation Envoyé par lila23 Voir le message
    j'ai saisi alors je ne peut pas supprimer l'enregistrement de l'affichage je le supprime tout court de ma table? c'est ca?
    Oui, et ça aura pour conséquence de le supprimer de l'affichage

    @++
    Dany

  7. #7
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    tampis alors pour moi car ce n'est pas ce que je veux je ne veux pas supprimer mon enregistrement de ma table j'en ai bsoin j'ai besoin d'afficher certain enregistrement sui se trouvent dans cette table et ne pas afficher ceux qui ne correspondent pas

    en tout merci de vos réponses

  8. #8
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Bonjour,

    Non tu peux supprimer l'enregistrement de l'affichage sans le supprimer de l'ensemble de donnée en utilisant un Filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      monGridClient.DataSource.Dataset.Filter := (Deuxieme_champ_ligne = XXXX); // au format SQL
      monGridClient.DataSource.Dataset.Filtered := True;

    à suivre ...
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  9. #9
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut.
    Si tu connais SQL, c'est le moment de l'utiliser pour filtrer les données à afficher.
    On progresse .....

  10. #10
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    bonjour tout le monde,

    le filtre que je veux faire n'est pas aprés une recherche mais par exemple quand je clik sur le dbnavigator j'analyse la ligne (d'aprés le deuxiéme champ) et si il correspon au critére je la garde dans le dbgrid sinon je l'enléve de l'affichage juste de l'affichage

    mon probléme c'est que je cest pas comment avancer ligne par ligne et récupérer la deuxiéme colonne et la tester!!!!

    merci

  11. #11
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Si tu veux que ce soit quand tu cliques sur la ligne (afin de t'assurer avoir au moins vu une fois la ligne ??) alors voici une solution :

    Ajoute un champ "calculer interne" à ton ensemble de donnée.

    Sur le clique sur la ligne; soit en fait sur le AfterScroll de l'ensemble de donnée sous jacent; alors tu valorises ton champs par OUI j'ai bien lu la ligne;

    Et ton filtre sur l'ensemble de donnée devient


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    Var InitialisationEnsemble : boolean;
     
      .... AfterOpen 
    begin
      InitialisationEnsemble := True;
       DataSet.First;
      While Not DataSet.Eof do DataSet.Next; // déclenche le AfterScroll;
       DataSet.First;
      InitialisationEnsemble := False;
      DataSet.Filter = (Le_Deuxieme_Champ = PAS BON) and (JAI_LU_LA_LIGNE = OUI);
    end;
     
    ....AfterScroll
    begin
      Dataset.DisableControls;
      Try 
        Dataset.Edit;
        Dataset.FieldByName(JAI_LU_LA_LIGNE) := (InitialisationEnsemble = False);
        Dataset.Post;
      finally
        Dataset.EnableControls;
      end;
    end;
    Une idée parmi tant d'autres
    a suivre ...
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  12. #12
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    débutante en delphi version sql surtout je trouve votre idée ingénieuse sauf que je n'ai pas compri je dois rajouter un champ dans ma table??

    encore merci de votre attention

  13. #13
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    en fait je voulais faire sur l'événement on titleclik du dbgrid sur la deuxiéme colonne si je clik sur le son titre j'aurais afficher que les enregistrement qui correspondent à la forme ( par exemple si je sui sur la fiche congé si je clik sur la deuxiéme colonne du dbgrid j'aurais que les mouvements qui concernent les congés )

    merciii

  14. #14
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par lila23 Voir le message
    en fait je voulais faire sur l'événement on titleclik du dbgrid sur la deuxiéme colonne si je clik sur le son titre j'aurais afficher que les enregistrement qui correspondent à la forme ( par exemple si je sui sur la fiche congé si je clik sur la deuxiéme colonne du dbgrid j'aurais que les mouvements qui concernent les congés )

    merciii
    On n'est plus du tout dans ce que j'avais compris !

    Alors je te propose de prendre le temps d'exprimer ton besoin de la façon la + claire possible.
    Puis de nous transmettre le nom de ta table, de tes champs, le SGBD utilisé le middle ware, les types de composants (TTable (beurk) ou TQuery, Devexpress ...), la version de Delphi.

    Et hop on repart du bon pied (le droit ?) !

    Ceci t'amènera peut-être aussi à une réflexion sur l'ergonomie de ton IHM.

    Ah oui et aussi , dit nous tu souhaites avoir une grille de consultation uniquement ?

    Allez un petit effort de rédaction et d'expression de besoin.
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  15. #15
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    oui c'est uen question d'interface que je me suis dit que c'était mieux de filtrer d'aprés la colonne du dbgrid

    tout d'abord j'utilise Delphi 7 ma base de données en SQL Serveur ma table se nomme "mouvement" elle comportent 9 champs en tout

    -matricule (varcahr 10)
    -type_mouvement( varchar 30) et c'est sur cette colonne que je veux filtrer les enregistrement affiché dans mon dbgrid ( car si on est sur la fiche congé j'aimerais quand clikant sur la 2éme colonne du dbgrid on est tout les mouvements congés et j'enlévent les autres genre absence mission ..etc)
    - date_deb et date_fin
    -motif( varchar 30)
    - et 4champs qui sont des commentaires (commentaire1,commentaire2,commentaire3,commentaire4)

    voila je crois que j'ai tout dit

    franchement un grand merciiiiiiiii

  16. #16
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Combien de type de mouvement distinct existe - il aujourd'hui ?
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  17. #17
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Alors, faisons les choses d'une autre manière :
    Tu met une combobox ou dbCombobox, tu liste dedans les types de mouvement et ensuite tu affiche dans la grille les data correspondant au type de mouvement souhaité.

    Non
    On progresse .....

  18. #18
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par Andry Voir le message
    Alors, faisons les choses d'une autre manière :
    Tu met une combobox ou dbCombobox, tu liste dedans les types de mouvement et ensuite tu affiche dans la grille les data correspondant au type de mouvement souhaité.

    Non

    +1

    En fonction du nombre de mouvement possible soit tu filtres via une DbComboBox soit, plus lisible, via un TRadioGroup.

    Car en effet, comment souhaites tu faire comprendre à l'utilisateur quel type de mouvement il va filtrer en cliquant sur une entête de colonne qui contient plusieurs type de mvt différents.

    Si je lis bien entre les lignes (car tu n'es pas prolixe en informations) je crois comprendre que cette même fenêtre est utilisée plusieurs fois pour présenter à chaque fois des mouvements mais toujours spécifiques au contexte d'ouverture alors pourquoi ne pas filtrer à l'ouverture et modifier le titre de ta fiche en fonction; mais peut-être que j'extrapole trop ?


    à suivre ...
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  19. #19
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    non pour chaque mouvement j'ai une forme donc quand je vai cliké sur la colonne du dbgrid sur n'importe quelle forme je sais ou je suis et je peux filtrer d'aprés ce renseignement la

    je ne veux pas utiliser de dbcombobox box car ma forme ala base sert a inserer je ne veux pas brusquer l'utilisateur

    merci bcp

  20. #20
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Bon ne nous fâchons pas tu as l'air de savoir ce que tu veux alors je te propose ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    const
      FiltreSql = '( %s = %s )';
    Var
      ValeurMouvement : String;
    begin
      inherited;
      if (Uppercase(Column.FieldName) = 'TYPE_MOUVEMENT') then
      begin
        ValeurMouvement := Column.Grid.DataSource.Dataset.FieldByName(Column.FieldName).AsString;
        Column.Grid.DataSource.Dataset.Filter := Format(FiltreSql, [Column.FieldName,QuotedStr(ValeurMouvement)]);
        Column.Grid.Dataset.Filtered := True;
      end;
    end;
    et la variante pour revenir sur une grille non filtrée avec un boolean (FiltreEnCours) initialisé à false sur l'ouverture de la fiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    const
      FiltreSql = '( %s = %s )';
    Var
      ValeurMouvement : String;
    begin
      inherited;
      if (Uppercase(Column.FieldName) = 'TYPE_MOUVEMENT') then
      begin
        if FiltreEnCours then
        begin
          ValeurMouvement := Column.Grid.DataSource.Dataset.FieldByName(Column.FieldName).AsString;
          Column.Grid.DataSource.Dataset.Filter := Format(FiltreSql, [Column.FieldName,QuotedStr(ValeurMouvement)]);
          Column.Grid.Dataset.Filtered := True;
        end
        else
        begin
          Column.Grid.DataSource.Dataset.Filter := '';
          Column.Grid.Dataset.Filtered := False;
        end;
      end;
    end;
    Je suppose ici que tu souhaites filtrer en fonction de l'enregistrement en cours de la grille;

    a+
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Mon DBGrid n'affiche pas certaines colonnes
    Par dygbahou89 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/10/2012, 14h35
  2. dbgrid ne reagit pas au premier coup
    Par SOPSOU dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/11/2009, 14h21
  3. Est il possible qu'un dbgrid n'est pas de source
    Par babacan dans le forum Débuter
    Réponses: 2
    Dernier message: 19/03/2009, 00h47
  4. Dbgrid Bug ou pas ?
    Par Didier Derain dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/12/2008, 10h23
  5. DBGrid + Mysql (mysql.pas)
    Par eoliaeolia dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/02/2004, 17h07

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