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 avoir un DBGrid avec des Combos et Boutons


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut Comment avoir un DBGrid avec des Combos et Boutons
    Salut tous le monde;

    j'ai des grilles en Acces (voir fichier attaché) et je avoir pareil en Delphi
    donc j'ai pensé à un DBGrid mais le problème qui se pose j'arrive pas à intégrer des Combo et des boutons au niveau des cellules de mon DBGrid

    J'espère que vous avez une proposition
    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
    begin
      if (gdFocused in State) then
      begin
        if (Field.FieldName = DBComboBox1.DataField ) then
        begin
          DBComboBox1.Left := Rect.Left + DBGrid1.Left;
          DBComboBox1.Top := Rect.Top + DBGrid1.top;
          DBComboBox1.Width := Rect.Right - Rect.Left;
          DBComboBox1.Height := Rect.Bottom - Rect.Top;
          DBComboBox1.Visible := True;
        end;
      end;
    end;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.DBGrid1ColExit(Sender: TObject);
    begin
      If DBGrid1.SelectedField.FieldName = DBComboBox1.DataField then
        begin
          DBComboBox1.Visible := false;
        end;
    end;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (key < > chr(9)) then
      begin
        if (DBGrid1.SelectedField.FieldName =DBComboBox1.DataField) then
        begin
          DBComboBox1.SetFocus;
          SendMessage(DBComboBox1.Handle,WM_Char,word(Key)0);
        end;
      end;
    end;

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 616
    Points : 25 311
    Points
    25 311
    Par défaut
    Pour le combo, tu dois pouvoir le faire via un la PickList dans le Column de la Grille, pour le bouton ... tout dépend ce qu'il faut, si c'est charger la liste, il y a des évènements en delphi qui permette de le gérer propre ... sinon faudra mettre une column sans attachement à une donnée et dessiner le bouton "Button.PaintTo(Grid.Canvas.Handle, ...)"

    @Content, ajoute les balise CODE [ CODE ][ /CODE ]

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    Par contre le PickList ne me permet pas à charger mon combo automatiquement à partir de la base de données mais il faut que je charge ma liste à la main

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 616
    Points : 25 311
    Points
    25 311
    Par défaut
    Ce n'est pas difficile de faire

    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
    with ADataSet.FieldByName('ChampAvecCombo').PickList do
    begin
      BeginUpdate();
      try
        AListSet.First();
        Capacity := AListSet.RecordCount;
        while not AListSet.Eof do
        begin
          AddObject(AListSet.FieldByName('ChampLibelle').AsString, Pointer(AListSet.FieldByName('ChampReference').AsInteger);
          AListSet.Next();
        end;
      finally
        EndUpdate();
      end;
    end;
    Sinon, faut surcharger la TDBGrid est modifié toute la gestion du InplaceEditor pour ajouter un TDBComboLookup à place d'un Combo simple

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Cela fait un petit bout de temps que je n'utilises plus le TDBGrid standard, mais il me semble me souvenir qu'il ajoute automatiquement un combobox dès lors qu'il s'agit d'un champ référence (ftLookup).

    @+ Claudius

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    bonjour

    tu peux peut-être t'inspirer de cela: http://www.developpez.net/forums/sho...8&postcount=30

    @+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    salut Claudius;

    j'ai pas compris c'est quoi ftloukup si c'est une propriété je l'ai pas trouvé!
    j'ai aussi essayé avec l'idée de picklist mais ça marche pas
    il y a Aityaha qui m'a proposé la dernière fois d'utiliser DBCtrlGrid mais il m'a pas bien expliqué,

    je vois que avec vos expériences vous aurez peut être un exemple à me donner avec DBCtrlGrid qui me semble le plus adéquat

    merci à vous

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 437
    Points : 5 853
    Points
    5 853
    Par défaut
    salut


    un ftlookup est un champs reference dans le dataset

    a la fin de tes champs bouton droit ajouter un champs
    et ensuite tu choisie reference tu rempli les autres infos et hop le tou est joué

    [edit]
    pour le bouton faut forcer le buttonstyle des la propriete column du dbgrid

    @+ Phil

  10. #10
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Citation Envoyé par Cl@udius
    Salut

    Cela fait un petit bout de temps que je n'utilises plus le TDBGrid standard, mais il me semble me souvenir qu'il ajoute automatiquement un combobox dès lors qu'il s'agit d'un champ référence (ftLookup).

    @+ Claudius
    +1 Claudius Exactement vous n'avez qu'a rajouter des champs de références et vous avez automatiquement votre DropDown dont la liste des items est issu de la table de références..
    pour l'ajout des champs de référence c'est dans la FAQ
    et pour avoir des bouton vous mettez BoutonStyle de la colonne voulu a cbsEllipsis et vous codez dans évènement OnEditButtonClick

  11. #11
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut

    @ Content
    et essai de commenter un peut ton code.

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 616
    Points : 25 311
    Points
    25 311
    Par défaut
    L'exemple de la FAQ est pas mal, mais lorsque le DataSet est le Résultat d'une requête, il faut ajouter le champ par code, hors la FAQ n'explique via IDE (j'ai d'ailleurs découvert ce menu, je ne l'avais jamais utilisé ... je n'ai jamais prédéfini des DataSet ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataSet.FieldDefs.Add('RefColumn', ftReference);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataSet.FieldByName('RefColumn').LookupDataSet := ... 
    DataSet.FieldByName('RefColumn').LookupKeyFields := ...

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    S'il vous plait je voir pas comment trouver nouveau champ
    quand je double clik sur DataSet ça me donne l'image (voir fichier attaché) mais je clik sur quelle liste pour avoir nouveau champ??

    peut être que je comprend pas vite mais veuillez me supporter SVP
    Fichiers attachés Fichiers attachés

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 616
    Points : 25 311
    Points
    25 311
    Par défaut
    tu peux aussi mettre des image JPEG (avant MsPaint) cela sera plus pratique que des Doc Word ...

    sinon, il existe aussi le menu contextuel sur le composant ... accessible via un clic droit ...

  15. #15
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    @ il faut double cliquer sur l'objet dataset (sa peut êtres ton ADOTable ou autres) lui même et non sur la propriété dans l'inspecteur d'objets.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    ok ça marche pour la prochaine fois

  17. #17
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    soror .

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    Merci à tous

    c'est sympa de votre part

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Comment créer un AVI avec des BMP ou JPG ?
    Par sremy dans le forum Contribuez
    Réponses: 16
    Dernier message: 09/12/2009, 15h39
  2. Réponses: 19
    Dernier message: 06/07/2006, 15h35
  3. comment avoir une form avec une partie déroulante?
    Par Jayceblaster dans le forum Delphi
    Réponses: 5
    Dernier message: 21/05/2006, 18h54
  4. [JBoss JBPM] comment réaliser un workflow avec des cycles ?
    Par biggef dans le forum Wildfly/JBoss
    Réponses: 6
    Dernier message: 27/04/2006, 12h17
  5. [eclipse][plugin] Comment avoir une fenêtre avec focus
    Par relivio dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2004, 15h54

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