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 OnEditButton Click


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut DBGrid OnEditButton Click
    Bonjour,

    Lorsque je fais un double-clique sur la cellule à modifier, le DBGrid appelle la procédure OnEditButtonClick

    Il y a t'il possibilité de contourné sa

    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
    25
    26
    27
    28
    29
    30
    31
    procedure TForm1.DBGridEditButtonClick(Sender: TObject);
    var
      XColIndex: Integer;
      XFieldName: String;
    begin
      XColIndex := TDrawGrid(DBGrid).Col - 1;
     
      if DBGrid.Columns[XColIndex].Field.DataType in [ftString] then
      begin
        XFieldName := DBGrid.Columns[XColIndex].Field.FieldName;
     
        with TClientDataSet.Create(nil) do
        begin
          ReadOnly := True;
          FileName := ClientDataSet1.FileName;
          Active := True;
     
          ListBox1.Items.BeginUpdate;
          while not Eof do
          begin
            if ListBox1.Items.IndexOf(Fields.FieldByName(XFieldName).AsString) = -1 then
              ListBox1.Items.Add(Fields.FieldByName(XFieldName).AsString);
     
            Next;
          end;
     
          ListBox1.Items.EndUpdate;
          Free; { TClientDataSet }
        end;
      end;
    end;
    Merci
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Curieux, je viens d'essayer sur un de mes rares OnEditButtonClick et je note que j'ai joué avec le OnDblClick
    En général, mes listes sont en lecture seule et je gère manuellement un Elipsis Button
    Et là, j'ai utilisé un OnEditButtonClick j'ai du avoir de double-clic pénible que j'ai contourné via Options : dgRowSelect / dgEditing

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TModuleXXXManageEventForm.DBGridEventDatesDblClick(Sender: TObject);
    begin
      if (Sender is TDBGrid) and (dgRowSelect in TDBGrid(Sender).Options) then
      begin
        DBGridEventDates.Options := DBGridEventDates.Options - [dgRowSelect] + [dgEditing];
        DBGridEventDates.Refresh();
     
        if FEventDates.IsEmpty() then
          DBNavigatorEventDates.BtnClick(nbInsert)
        else
          DBNavigatorEventDates.BtnClick(nbEdit);
      end;
    end;
    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
     
    procedure TModuleXXXManageEventForm.DBNavigatorEventDatesBeforeAction(Sender: TObject; Button: TNavigateBtn);
    begin
      // On utilise un TDBNavigator mais l'on court-circuite le Insert de la DB pour un Append de la couche ORM,
      // cela assure ainsi le lien Parent-Enfant entre FEvents et FEventDates
      if (Button = nbInsert) or ((Button = nbEdit) and FEventDates.IsEmpty()) then
      begin
        // On passe à l'année suivant la dernière année renseignée !
        if not FEventDates.IsEmpty() then
          Inc(FLastYear);
        FEventDates.Append();
        FEventDates.EvenementSpecialAnnee := FLastYear;
        FLastDate := RecodeYear(FLastDate, FLastYear);
        FEventDates.EvenementSpecialDateMobile := FLastDate;
        if ShowEventsDateEditor(DBGridEventDates, FEventFieldDate) then
          FLastDate := FEventDates.EvenementSpecialDateMobile;
     
        DBGridEventDates.Options := DBGridEventDates.Options - [dgRowSelect] + [dgEditing];
        DBGridEventDates.SetFocus();
        Abort; // Permer d'annuler l'action par défaut !
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut
    J'ai testé ceci : ça à l'air de marcher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.DBGridDblClick(Sender: TObject);
    var
      XColIndex: Integer;
    begin
      XColIndex := TDrawGrid(DBGrid).Col - 1;
     
      if not DBGrid.Columns[XColIndex].Field.ReadOnly then
        DBGrid.EditorMode := True;
    end;
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

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

Discussions similaires

  1. BDD double click sur une DBGrid
    Par chamamo dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/10/2006, 15h20
  2. simuler un double click sur une liste dans un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/09/2005, 10h45
  3. controle d'un click sur DBGRID
    Par bzh56 dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/07/2005, 20h20
  4. DBLookupComboBox dans DBGrid
    Par KThrax dans le forum Bases de données
    Réponses: 7
    Dernier message: 24/08/2004, 15h18
  5. [Kylix] Contrôle DBGrid
    Par KThrax dans le forum EDI
    Réponses: 1
    Dernier message: 10/05/2002, 14h18

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