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 :

Drag & Drop dans un même DBGrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut Drag & Drop dans un même DBGrid
    Bonjour,

    Je souhaiterai mettre en place un sytème de Drag & Drop dans un même DBGrid pour modifier l'ordre des pièces.
    Par exemple, si j'ai 2 lignes et que je mets la 1ère à la place de la 2ème, je souhaiterai échanger leurs id.
    J'avais trouvé un exemple mais je bloque à la fin, je pense il faudrait que je fasse un update mais il faudrait que je fasse un refresh aussi enfin voilà le code :

    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
    procedure TF_Operation.CRDB_PiecesDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    var gc     : TGridCoord;
        ordre  : Integer;
    begin
      gc := CRDB_Pieces.MouseCoord(X,Y);
      if (gc.X > 0) AND (gc.Y > 0) then
      begin
        if DM_Operation.Q_ChargerPiecesOpe.RecordCount = 0 then exit;
     
        ordre := DM_Operation.Q_ChargerPiecesOpePIE_ID.AsInteger;
       { with CRDB_Pieces do
        begin
          DataSource.DataSet.MoveBy (gc.Y - Row);
          DataSource.DataSet.Edit;
          Columns.Items[-1 + gc.X].Field.AsInteger := ordre;
        end;  }
      end;
    end;
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,
    Citation Envoyé par drake56 Voir le message
    Je souhaiterai mettre en place un sytème de Drag & Drop dans un même DBGrid pour modifier l'ordre des pièces.
    Par exemple, si j'ai 2 lignes et que je mets la 1ère à la place de la 2ème, je souhaiterai échanger leurs id.
    Changer l'ID n'est pas un geste anodin contrairement à changer une valeur d'une colonne qui sert à ordonner l'affichage dans une grille. Cela a des impacts sur la table de la base de données sous jacente et des tables qui peuvent y être liées via une clé étrangère !!!
    C'est une opération qui doit être murement réfléchie car mal faite, elle peut aboutir à mettre une pagaille monstre dans la base de données !

    Citation Envoyé par drake56 Voir le message
    J'avais trouvé un exemple mais je bloque à la fin,
    je pense il faudrait que je fasse un update mais il faudrait que je fasse un refresh aussi enfin voilà le code :

    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
    procedure TF_Operation.CRDB_PiecesDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    var gc     : TGridCoord;
        ordre  : Integer;
    begin
      gc := CRDB_Pieces.MouseCoord(X,Y);
      if (gc.X > 0) AND (gc.Y > 0) then
      begin
        if DM_Operation.Q_ChargerPiecesOpe.RecordCount = 0 then exit;
     
        ordre := DM_Operation.Q_ChargerPiecesOpePIE_ID.AsInteger;
       { with CRDB_Pieces do
        begin
          DataSource.DataSet.MoveBy (gc.Y - Row);
          DataSource.DataSet.Edit;
          Columns.Items[-1 + gc.X].Field.AsInteger := ordre;
        end;  }
      end;
    end;
    L'exemple dont vous avez tiré ce code s'appuyait sur un descendant du composant TDBGrid, un THackDBGrid qui faisait passer la propriété Row du statut protégé au statut public et pour des données provenant d'un autre composant. C'est donc inapplicable en l'état...
    Philippe.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    Merci pour votre réponse, finalement j'ai créé un nouveau champ qui gère l'ordre puis vu que je n'ai pas réussi à faire de drag & drop, j'ai contourné le problème en mettant un TEdit modifiable dans mon Grid.

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

Discussions similaires

  1. Problème de Drag'n'Drop dans un SWF embarqué
    Par Jay00 dans le forum Flex
    Réponses: 5
    Dernier message: 13/08/2007, 14h26
  2. Drag and drop dans un input
    Par kriekbellevue dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/12/2006, 20h55
  3. [VB.net] Drag and drop dans une Treeview
    Par gégécap dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/10/2006, 10h05
  4. [VB.NET]Drag and Drop dans une Listview
    Par gégécap dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/08/2006, 18h41
  5. Drag and drop dans un TTreeView
    Par BigBenQ dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/10/2005, 14h57

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