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 :

tester la case a cocher dans SMDBGrid


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Décembre 2007
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 258
    Par défaut tester la case a cocher dans SMDBGrid
    bonjours a tous;
    comment tester la case a cocher d'une ligne de SMDBGrid ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 101
    Par défaut
    la SMDBGrid est un composant non standard et non inclu dans Delphi par défaut, comme c'est une lib externe, il faut tu consultes la documentation !

    Sinon, pour un TDBGrid classique, il faut rappeler que tous les données sont contenus dans un TDataSet, il est tout à fait possible de gérer une case à cocher dedans en lui dédiant une colonne boolean et en effectuant le Dessin d'une CheckBox comme dans la FAQ : Comment mettre une case à cocher dans une DBGrid ? ou en utilisant DrawFrameControl
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre très actif
    Inscrit en
    Décembre 2007
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 258
    Par défaut
    bjr ShaiLeTroll;
    justement, je n'ai pas trouve la documentation dans le net
    la solution propose dans la FAQ ne m'arrange pas parceque je ne cherche pas a ajouter un champ boolean dans la table, je cherche juste a donner la possibilite pour selectionner des lignes pour faire a autre traitement.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    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 663
    Billets dans le blog
    65
    Par défaut
    S'agit-il de la case à cocher créer par l'option [eoCheckBoxSelect] ?
    et de l'option dgMultiSelect.

  5. #5
    Membre très actif
    Inscrit en
    Décembre 2007
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 258
    Par défaut
    S'agit-il de la case à cocher créer par l'option [eoCheckBoxSelect] ?
    et de l'option dgMultiSelect.
    oui SergioMaster

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 101
    Par défaut
    la CheckBox dans la zone du Indicator (eoCheckBoxSelect),
    c'est SelectedRows du TDBGrid fournissant une Collection de TBookmark !

    C'est une fonctionnalité existante du TDBGrid améliorée dans TSMDBGrid :
    Comment gérer la sélection multiple sur un DBGrid ?


    Profite, tu as le code du TSMDBGrid, lit donc les fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function TSMDBGrid.ActiveRowSelected: Boolean;
    procedure TSMDBGrid.ToggleRowSelection;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Salut,

    Pour faire cela voici un exemple

    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
    // ...
      if SMDBGrid1.SelectedRows.Count > 0 then
      begin
        with SMDBGrid1.DataSource.DataSet do
        begin
          for i:=0 to SMDBGrid1.SelectedRows.Count - 1 do
          begin
    // on ce place sur la ligne cochée
            GotoBookmark(Pointer(SMDBGrid1.SelectedRows.Items[i]));
            // ton traitement
     
          end;
        end;
      end;
    // ...
    Bye

  8. #8
    Membre très actif
    Inscrit en
    Décembre 2007
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 258
    Par défaut
    merci bcp mes amis;
    BuzzLeclaire, ton code marche parfaitement, c'est ca ce que je cherche.
    mais j'ai decouvris une anomalie dans (eoCheckBoxSelect)
    pour cocher ou decocher un checkbox la ligne correspondante doit etre selectionne sinon si vous essayez de cocher une ligne non selectionne alors la ligne selectionne qui prends l'effet.

  9. #9
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Citation Envoyé par messahel Voir le message
    ....

    j'ai decouvris une anomalie dans (eoCheckBoxSelect)
    pour cocher ou decocher un checkbox la ligne correspondante doit etre selectionne sinon si vous essayez de cocher une ligne non selectionne alors la ligne selectionne qui prends l'effet.
    Et en claire sa donne quoi ? lol, j'ai rien compris.

  10. #10
    Membre très actif
    Inscrit en
    Décembre 2007
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 258
    Par défaut
    ce que je veux dire c'est
    quand tu clique sur n'importe quel checkbox un autre checkbox aura coche (de la ligne selectionne)

  11. #11
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 101
    Par défaut
    C'est probablement le comportement normal de la TSMDBGrid, d'ailleurs, comme je disais, il suffit de lire le code, on voit que c'est bel et bien l'enregistrement en cours qui est ajouté à SelectedRows !
    Est-ce un bug ou un manque d'ergonomie ?

    Faudrait modifier le code de TSMDBGrid.MouseUp pour qu'il déplace le curseur la ligne du pseudo CheckBox cliqué avant de l'ajouter à SelectedRows via TSMDBGrid.ToggleRowSelection !

    Selon si tu maintiens Shift et que dgMultiSelect est dans Options, tu dois avoir un comportement différent ! plus proche de ce que tu souhaite !

    Faudrait se diriger vers des composants plus poussés comme TMS ou DevExpress, c'est payant !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/10/2006, 09h06
  2. Case a cocher dans ACCESS
    Par vautour29 dans le forum Access
    Réponses: 2
    Dernier message: 01/06/2006, 13h54
  3. [VB]Case a cocher dans un datagrid
    Par Job dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/01/2006, 12h07
  4. [WebForms]Ajout d'une case a cocher dans l'entête d'un DataGrid
    Par julio84 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 02/06/2005, 15h50

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