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 :

identifier position cellule DBGrid à l'aide de DataSet


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut identifier position cellule DBGrid à l'aide de DataSet
    Bonjour

    En fait, j'ai un DBGrid relié bien sur à un dataset. Sur la même fiche, j'ai un bouton et un champ TEdit de saisie de nombre et un bouton Control Sup.
    Sur mon DBgrid, j'ai une colonne Valeur qui contient rien que des nombres.
    Mon soucis est que je dois colorier les cellules de la colonne Valeur ou une valeur de cette colonne est supérieure à un nombre que l'utilisateur aura saisi dans le TEdit avant de lancer la vérification et la coloration des cellules vérifiant la condition à l'aide du bouton Control Sup . Cette action doit pouvoir être relancée si l'utilisateur le désire avec une nouvelle valeur dans le TEdit.
    J'atends vos propositions et suggestions.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 657
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 657
    Billets dans le blog
    65
    Par défaut
    Cela n'a pas l'air compliqué , quoique je n'ai jamais essayé en fonction d'une valeur variable .
    Pour la 'colorisation' de la cellule plusieurs posts parle déjà du sujet , un recherche de OnDrawDataCell ou dans la FAQ fourni les réponses .
    Quant à la modification en fonction du Bouton , je crois que l'ordre Repaint ou Refresh de la DBGrid devrait fonctionner

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    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 491
    Par défaut
    Salut

    pour faire simple

    dans la methode du dessin des colonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure Tform.GrilleDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    tu conserve l'ancien on ne sais jamais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      inherited;
      oldcolor :=  (sender as TDBGridSiel).Canvas.Brush.Color;
    tu recupere la valeur de ton champs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     intValue := (sender as TDBGridSiel).DataSource.DataSet.FieldByName('MonChamp').AsInteger;
    selon la valeur tu redefini les couleur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      if (intValue >= IntSeuilValue) then
      begin
        (sender as TDBGridSiel).Canvas.Font.Color  := clnavy;
        (sender as TDBGridSiel).Canvas.Pen.Color  := clnavy;
        (sender as TDBGridSiel).Canvas.Brush.Color := clLightCyan
      end
      else 
      begin
        (sender as TDBGridSiel).Canvas.Font.Color  := clnavy;
        (sender as TDBGridSiel).Canvas.Pen.Color  := clnavy;
        (sender as TDBGridSiel).Canvas.Brush.Color := clLightGreen
      end;
    le cas particulier des ligne selectionnées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      if (gdSelected in State) then
      begin
        (sender as TDBGridSiel).Canvas.Font.Color  := clWhite;
        (sender as TDBGridSiel).Canvas.Pen.Color  := clWhite;
        (sender as TDBGridSiel).Canvas.Brush.Color := clnavy;
      end;
    on redessine tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      (sender as TDBGridSiel).Canvas.FillRect(Rect);
      TDBGrid(Column.Grid).DefaultDrawColumnCell(Rect, DataCol, Column, []);

  4. #4
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 249
    Par défaut
    Salut,
    Merci pour ta réponse bien clair et précis.
    Mais juste une question, tu dis de faire cela dans l'évènement DrawColumnCell !!! Mais moi, je désire que cette colaration et le test se fasse après saisi de l'entier dans le TEdit et le click sur le bouton Control Sup.
    NB: Ce test doit être fait sur toutes les données de la colonne concernée.
    Cela signifie qu'il faut pouvoir boucler les données et faire ce test.

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    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 491
    Par défaut
    salut

    il te suffit dans ton evenement click de forcer le rafraichisement de la grille
    afin que celle-ci se redessinne

    donc si j'ai bien compris

    tu creer une variable globale a ta form
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IntSeuilValue : integer;
    dans le oncreate du tedit et tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IntSeuilValue :=-99999 ;
    dans le onchange du tedit et tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IntSeuilValue :=-99999 ;
    dans le onclick du "Control Sup" et tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         IntSeuilValue := strtoint(edit1.text) ;
         MaGrille.refresh;
    dans le ondrawcell de la grille tu remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      // on ajoute le cas ou ton tedit n'est pas definie
      // on supprimme toutes les couleur
      if intSeuilValue = -99999 Then 
      begin
         (sender as TDBGridSiel).Canvas.Font.Color  := clnavy;
         (sender as TDBGridSiel).Canvas.Pen.Color  := clnavy;
         (sender as TDBGridSiel).Canvas.Brush.Color := clLightGreen
      end
      if (intValue >= IntSeuilValue) then
         ...
    @+ Phil

Discussions similaires

  1. position d'une cellule dbgrid
    Par tarekk73 dans le forum Débuter
    Réponses: 3
    Dernier message: 12/09/2013, 14h02
  2. connaitre la position d'une cellule dbgrid
    Par chiheb79 dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2009, 12h19
  3. [D6] Positionner focus dans cellule DBGrid
    Par Lung dans le forum Delphi
    Réponses: 2
    Dernier message: 12/06/2006, 08h33
  4. [VBA-E]Récupérer position cellule
    Par 0xYg3n3 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 18/04/2006, 12h14
  5. comment passer d'une cellule dbgrid
    Par khier dans le forum Composants VCL
    Réponses: 2
    Dernier message: 31/03/2006, 12h07

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