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 :

Postionnement dans une colonne dans un DBGrid


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut Postionnement dans une colonne dans un DBGrid
    Salut à tous,

    Quelqu'un sait-il comment faire pour se positionner dans une colonne spécifique d'un DBGrid par programmation en Delphi

    J'ai plusieurs colonne et j'aimerai bien que suivant la valeur d'un champ dans une ligne d'un DBGrid, le curseur se positionne sur une autre colonne sur cette même ligne.

    Merci d'avance pour votre aide

    Jeankiki

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Août 2003
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 207
    Points : 91
    Points
    91
    Par défaut FocusControl
    Tu peux peut-être utiliser la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonQuery.MonChamp.FocusControl;
    Wilco

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    Merci Wilco, effectivement ça marche, mais maintenant le problème est que si j'utilise la touche Tabulation pour passer à la colonne suivante, ça marche mais si je fais encore Tabulation, il revient sur la colonne ou j'ai mi le FocusControl et il ne passe pas à la colonne suivante.

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TfrmMain.dbgridXPrestaColExit(Sender: TObject);
        if dbgridXPresta.DataSource.DataSet.FieldByName('XCODE').AsInteger <> 100 then
        begin
          dbgridXPresta.Fields[6].FocusControl; // Field XFORFAIT
        end;
    end;
    As-tu une idée pour arrêter le FocusControl de se champ?
    Jeankiki

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    je parie que ton dbgridXPresta.DataSource.DataSet.FieldByName('XCODE').AsInteger <> 100 est vrai
    lors de ton 2eme appui sur tab :
    dbgridXPrestaColExit s'applique chaque fois que tu change de colone!

    met un boolean a vrai (en variable globale) et ajoute le au test de ton if pour que le test ne soit vrai qu'une fois (n'oublie pas de réinitialiser ce boolean à faut si tu change de ligne!)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    Salut nisaes,

    Voici mon 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    procedure TfrmMain.dbgridXPrestaColExit(Sender: TObject);
    begin
      SetColonneForfait;
    end;
     
    procedure SetColonneForfait;
    var
      num_ligne : integer;
      num_colonne : integer;
    begin
      with frmMain do
      begin
        if dbgridXPresta.DataSource.DataSet.FieldByName('XCODENATURE').AsString = 'K' then
        begin
          with TStringGrid(dbgridXPresta) do
          begin
            //num_ligne := Row;
            num_colonne := Col;
            if (dbgridXPresta.DataSource.DataSet.FieldByName('XFORFAIT').AsInteger = 0) or (dbgridXPresta.DataSource.DataSet.FieldByName('XFORFAIT').AsString = '') then
              Col := 6
            else
              Col := 8;
            SetFocus;
          end;
        end;
      end;
    end;
    Peux-tu me dire comment placer la valeur booléen afin de ne pas avoir de problème

    Merci d'avance pour ton aide

    Jeankiki

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 8
    Points : 7
    Points
    7
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    procedure TfrmMain.dbgridXPrestaColExit(Sender: TObject); 
    begin 
      if afaire then SetColonneForfait; 
    end; 
     
    procedure SetColonneForfait; 
    var 
      num_ligne : integer; 
      num_colonne : integer; 
    begin 
      with frmMain do 
      begin 
     
      afaire :=false;
     
        if dbgridXPresta.DataSource.DataSet.FieldByName('XCODENATURE').AsString = 'K' then 
        begin 
          with TStringGrid(dbgridXPresta) do 
          begin 
            //num_ligne := Row; 
            num_colonne := Col; 
            if (dbgridXPresta.DataSource.DataSet.FieldByName('XFORFAIT').AsInteger = 0) or (dbgridXPresta.DataSource.DataSet.FieldByName('XFORFAIT').AsString = '') then 
              Col := 6 
            else 
              Col := 8; 
            SetFocus; 
          end; 
        end; 
      end; 
    end;
    si changement de row (onchange de n'importequel champ ou sur tab si dernière colone afaire:=true;
    et sur formcreate ou lors de l'in du prog afaire:=true;
    et tu déclare afaire avec la variable tform

    question subsidaire :
    le focus d'une colone change avant ou après le déclanchement de ColExit?


    [Balise ajoutée par King Kaiser]

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    Salut nisaes,

    En fait, j'ai résolu le problème hier soir et j'ai oublié de mettre la solution sur le site, voici comment j'ai procédé

    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
     
    procedure SetColonneForfait;
    var
      num_ligne : integer;
      num_colonne : integer;
    begin
      with frmMain do
      begin
        if dbgridXPresta.DataSource.DataSet.FieldByName('XCODENATURE').AsString = 'K' then
        begin
          if ColFocus = False then
            begin
              dbgridXPresta.DataSource.DataSet.FieldByName('XFORFAIT').FocusControl;
              ColFocus := True;
            end
          else
            begin
              dbgridXPresta.DataSource.DataSet.FieldByName('XFAC').FocusControl;
              ColFocus := False;
            end;
        end;
      end;
    end;
    Et j'ai mi le ColFocus en variable globale comme tu le proposais, j'ai du mettre SetColonneForfait dans dbgridXPrestaColExit.

    Et le résultat voulu fonctionne correctement.
    Pour ta question subsidiaire, il me semble que le focus change après le ColExit, mais je suis pas certain à 100%
    Merci à toi
    Jeankiki

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    ben oui, voila pourquoi ça marchait lors du tab sortant de la colone et que tu y revenait après! Tu peux donc en être sur!
    A+

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

Discussions similaires

  1. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  2. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  3. Réponses: 28
    Dernier message: 30/11/2006, 17h47
  4. Noms de colonne dans une colonne
    Par Digirom dans le forum Langage SQL
    Réponses: 14
    Dernier message: 23/04/2004, 11h51
  5. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 16h12

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