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 :

Grille DevExpress avec CheckBox


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut Grille DevExpress avec CheckBox
    Hello world !

    Dans un logiciel que je modifie, j'ai une grille, composant devexpress TcxGrid, dont 4 des colonnes sont des checkbox (propriété Properties positionnée sur TcxChekcBoxPropertie).

    Je veux, sur le cochage/décochage d'une des 4 checkbox, recalculer certains paramètres de la ligne en fonction de la nouvelle valeur de la checkbox. Or, j'ai essayer les événements OnChange, OnEditValueChanged, OnValidate, je ne parviens pas à récupérer la nouvelle valeur de la checkbox, j'ai toujours l'ancienne.


    Quelle est l'astuce que je rate ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TMain.cxGrid_TOTO_ColAPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);
    var
      FRecordIndex: Integer;
    begin
      FRecordIndex := cxGrid_TOTOTV.DataController.FocusedRecordIndex;
      ShowMessage('PropertiesValidate / ' + BoolToStr(cxGrid_TOTOTV.DataController.Values[FRecordIndex, cxGrid_TOTO_ColA.Index]));
    end;
    Je ne trouve rien sur le site de devExpress, les composants sont trop vieux sans doute.

    PS : La grille n'est pas liée à une source de données, elle est gérée manuellement.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    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 786
    Par défaut
    Bonjour,
    Citation Envoyé par sevyc64 Voir le message
    Quelle est l'astuce que je rate ?
    La nouvelle valeur qui n'est donc pas encore validée est stockée dans le variant DisplayValue passé en paramètre...
    Reste à vérifier que c'est l'endroit approprié pour réactualiser les valeurs calculées...

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    Ok, donc DisplayValue contiendra directement True ou False correspondant à la propriété Checked dans le cas d'une checkbox, c'est ça ?

    Citation Envoyé par Ph. B. Voir le message
    Reste à vérifier que c'est l'endroit approprié pour réactualiser les valeurs calculées...
    Non ce n'est pas l'endroit le plus approprié, mais, à défaut d'autre chose, ça sera un moindre mal.
    Le OnValidate ne se déclenche que lorsqu'on quitte la cellule. J'aurais préféré déclencher le calcul sur le cochage directement. Ça sera donc plutôt sur le OnChange, ou le OnEditValueChange. Mais sur ces 2 événements, je n'ai que le "Sender: TObject" en paramètre.

    De plus ma routine événement est commune aux 4 checkbox, il faudra donc que je puisse identifier la colonne qui déclenche pour savoir sur laquelle je dois aller récupérer la valeur nouvelle.

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    Ok, comme quoi la nuit porte conseil.

    Sur le OnChange, je récupère bien la nouvelle valeur de la checkbox qui déclenche avec ce code TcxCheckBox(Sender).Checked. Plus simple on peut pas faire, mais après une journée de boulot avec plus de 30°C dans le bureau, j'avais pas trouvé.

    Me reste plus qu'à trouver comment identifier la checkbox qui déclenche.

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    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 786
    Par défaut
    Bonjour,
    Citation Envoyé par sevyc64 Voir le message
    Sur le OnChange, je récupère bien la nouvelle valeur de la checkbox qui déclenche avec ce code TcxCheckBox(Sender).Checked. Plus simple on peut pas faire, mais après une journée de boulot avec plus de 30°C dans le bureau, j'avais pas trouvé.

    Me reste plus qu'à trouver comment identifier la checkbox qui déclenche.
    Sachant que vous avez la TcxCheckBox en transtypant Sender, vous devriez pouvoir remonter à son parent, et par là à la cellule, la colonne ou la grille. Vous avez déjà identifié la ligne, donc tout ce qu'il faut pour réactualiser les valeurs calculées...

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    J'ai pas réussi, le parent se présente comme un TGridSite

    N'ayant plus trop le temps de chercher, je suis passé sur 4 évents distant, pour chaque colonne, qui, chacun lit la valeur modifié de sa propre checkbox et les valeurs "normales" des autres checkbox et passe la main à une fonction unique qui traite les 4 valeurs.

    C'est un peu moins propre, mais j'ai pas le temps de faire mieux pour le moment.

    Merci pour l'aide en tout cas.

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

Discussions similaires

  1. [JTree] Feuille avec CheckBox
    Par redtux dans le forum Composants
    Réponses: 4
    Dernier message: 27/10/2005, 20h11
  2. Mise en archive avec checkbox
    Par flo456 dans le forum ASP
    Réponses: 21
    Dernier message: 19/10/2005, 13h41
  3. Saut de ligne dans une bande d'une grille DevExpress
    Par xant dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/08/2005, 14h51
  4. [C#]Datagrid avec checkboxs et pagination
    Par kenzo080 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 19/07/2005, 07h10
  5. [C#] TreeView avec CheckBox "indeterminate"
    Par padumeur dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/01/2005, 20h53

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