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

Bases de données Delphi Discussion :

recuperer l'enregistrement d'un dbgrid pointe par la souris


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué Avatar de bidochon
    Inscrit en
    Juin 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 168
    Points : 156
    Points
    156
    Par défaut recuperer l'enregistrement d'un dbgrid pointe par la souris
    bonjour,

    je souhaite faire un glisser deposer du contenu d'un TEdit sur un champ d'un DBGrid.
    Pas de probleme pour glisser le contenu du TEdit, mais lorsque je relache la souris sur le DBGrid, je voudrais que ce soit l'enregistrement pointé par la souris qui soit modifié, et non l'enregistrement actif comme c'est le cas.
    comment faire ?

    merci
    Tant de mains pour transformer ce monde, et si peu de regards pour le contempler !
    (Julien Gracq)

  2. #2
    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

    Je te propose cette solution.
    Pendant le DragOver il suffit de forcer la sélection de l'enregistrement (et du champ) sous la souris. Ce qui permet à l'utilisateur de voir où il va déposer sa valeur.

    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
     
    procedure TForm1.DBGrid1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    var
      GridCoord: TGridCoord;
      newSelIndex, nCurrentRow: Integer;
    begin
      // N'accepter le Drag que depuis le TEdit
      Accept := (Source is TEdit);
      if not Accept then Exit;
     
      // N° de la ligne actuellement sélectionnée
      nCurrentRow := TDrawGrid(Sender).Row;
     
      // Se déplacer vers l'enreg. survolé
      with TDBGrid(Sender) do begin
        // Position de la souris dans la grille
        GridCoord := MouseCoord(X, Y);
        // Sortir si en dehors d'une cellule
        if (GridCoord.X = -1) or (GridCoord.Y = -1) then Exit;
        // Colonne
        newSelIndex := GridCoord.X;
        if (dgIndicator in Options) then newSelIndex := newSelIndex - 1;
        if newSelIndex <> SelectedIndex then SelectedIndex := newSelIndex;
        // Ligne
        if nCurrentRow <> GridCoord.Y then
          DataSource.DataSet.MoveBy(GridCoord.Y - nCurrentRow);
      end;
    end;
    Et ensuite modifier l'enregistrement au moment du Drop
    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
     
    procedure TForm1.DBGrid1DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
      GridCoord: TGridCoord;
    begin
      with TDBGrid(Sender) do begin
        // Position de la souris dans la grille
        GridCoord := MouseCoord(X, Y);
        // Sortir si en dehors d'une cellule
        if (GridCoord.X = -1) or (GridCoord.Y = -1) then Exit;
        // Editer le champ
        DataSource.DataSet.Edit;
        DataSource.DataSet.FieldByName(SelectedField.FieldName).Value := Edit1.Text;
        DataSource.DataSet.Post;
      end;
    end;
    L'astuce consiste surtout à récupérer le n° de la ligne sélectionnée. La propriété Row du DBGrid n'étant pas publiée, il suffit de transtyper le TDBGrid en TDrawGrid. (Expliqué dans la FAQ, merci Nono40 ).

    A toi d'adapter le code au moment du Drop si le champ n'est pas de type String.

    @+ Claudius

  3. #3
    Membre habitué Avatar de bidochon
    Inscrit en
    Juin 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 168
    Points : 156
    Points
    156
    Par défaut
    Merci Claudius,
    j'ai adapté les deux bouts de code et cela fonctionne tres bien.
    Tu m'as enlevé une bonne epine du pied.

    Bravo et merci
    Tant de mains pour transformer ce monde, et si peu de regards pour le contempler !
    (Julien Gracq)

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

Discussions similaires

  1. [Débutant] recupere la cellule d'un GridView cliqué par la souris
    Par sak_ura dans le forum ASP.NET
    Réponses: 8
    Dernier message: 27/09/2012, 00h42
  2. Récupérer le control pointé par la souris
    Par Cedric33 dans le forum C#
    Réponses: 5
    Dernier message: 23/10/2008, 13h14
  3. Couleur du pixel pointé par la sourie
    Par algerian dans le forum Windows
    Réponses: 4
    Dernier message: 16/08/2005, 18h22
  4. Réponses: 4
    Dernier message: 21/05/2004, 09h13
  5. [MATH] Point par rapport à une droite
    Par teska dans le forum Mathématiques
    Réponses: 6
    Dernier message: 14/05/2003, 16h11

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