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

C++Builder Discussion :

suppression multiple dans un StringGrid


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut suppression multiple dans un StringGrid
    Bonjour,
    Après la lecture du tutoriel de formation à C++ Builder, j'ai bien compris le fonctionnement de la suppression de ligne dans un StringGrid.
    Mon problème c'est que j'aimerai savoir comment supprimer plusieurs lignes dans ce tableau.
    Pour information j'ai un système qui me permet de faire une sélection multiple.

    De même, je pense qu'il serai intéressant de rajouter quelque chose à ce tutoriel, c'est l'explication de la possibilité de sauvegarder les données comprises dans un StringGrid vers un fichier de type .csv par exemple.

    Merci pour vos réponses.
    Cordialement
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Il te suffit pour cela de faire une boucle sur les coordonnées de cellules sélectionné, disponible dans la propriété Selection de la StringGrid par exemple en reprenant la fonction de la FAQ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i;
    for(i=StringGrid1->Selection.Left;i>=StringGrid1->Selection.Top;i--)
    {
      SupprimerLigne(i,StringGrid1);
    }
    Cela devrait fonctionner, je le fait de tête.

  3. #3
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    J'ai un petit soucis, j'ai créé la fonction supprimer ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     TForm1::SupprimerLigne(int numLigne, TStringGrid * monStringGrid)
    {
      int i;
      for(i=numLigne; i<(monStringGrid->RowCount-2); i++)
      {
        monStringGrid->Row[i] = monStringGrid->Row[i+1];
      }
      monStringGrid->RowCount--;
    }
    Mon problème c'est que j'ai un message d'erreur que je n'arrive pas à corriger(figé sur la zone en gras).
    Pouvez vous m'expliquer et m'aider à résoudre ce problème?

    [C++ Erreur] Unit1.cpp(254): E2062 Indirection incorrecte
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Il y a une erreur qui c'est glissé dans la FAQ, il faut mettre Rows à la place de Row :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void SupprimerLigne(int numLigne,TStringGrid * monStringGrid)
    {
      int i ;
      for(i=numLigne;i<(monStringGrid->RowCount-2);i++){
        monStringGrid->Rows[i] = monStringGrid->Rows[i+1] ;
      }
      monStringGrid->RowCount-- ;
    }

  5. #5
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Billets dans le blog
    5
    Par défaut
    Mon problème persiste je suis désolé pour ma faible capacité à le résoudre mais je commence vraiment avec le C++ et avec Builder
    Maintenant lorsque je fait appel à ma fonction de suppression plus rien de ne se passe.

    Je ne sais pas a quoi cela est du.
    voila 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
     void __fastcall TForm1::StringGrid1ContextPopup(TObject *Sender,
          TPoint &MousePos, bool &Handled)
    {
     int i;
     for(i=StringGrid1->Selection.Left; i>=StringGrid1->Selection.Top; i--)
     {
      SupprimerLigne(i,StringGrid1);
     }
    }
     
    TForm1::SupprimerLigne(int numLigne, TStringGrid * monStringGrid)
    {
      int i;
      for(i=numLigne; i<(monStringGrid->RowCount-2); i++)
      {
        monStringGrid->Rows[i] = monStringGrid->Rows[i+1];
      }
      monStringGrid->RowCount--;
    }
    Est ce que c'est à cause du fait que je l'appel dans StringGrid1ContextPopup?
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  6. #6
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Essaye de voir en mettant un point d'arrêt au niveau de la boucle for, et de voir quelle sont les valeurs de Selection, de i,...

  7. #7
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    tu peux déjà essayer vérifier que tes fonctions sont appelés...
    un peu de debug quoi...

    ta fonction StringGrid1ContextPopup, est-elle appelée?

  8. #8
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 23
    Par défaut
    Salut

    Quand tu dis:
    Citation Envoyé par ludojojo Voir le message
    Maintenant lorsque je fait appel à ma fonction de suppression plus rien de ne se passe.
    Tu veux dire que tu n'as plus d'erreur à la compilation?

    Ton code fonctionne chez moi, et j'arrive à supprimer plusieurs lignes mais je suis étonné par quelques petites choses.

    ta fonction SupprimerLigne ne retourne aucune valeur, je mettrais donc un type void et pas rien du tout.

    Ton programme fait deux boucle for imbriquées avec la meme variable "i", ca marche car ce sont des fonctions différentes mais ce n'est pas une habitude à prendre car ca pourrait te poser des problèmes un jour, en plus au lieu d'une variable "i", ton code serait plus lisible si tu utilisais des noms comme indexLigne ou quelque chose dans le style.

    Je trouve surtout bizarre la ligne :
    Citation Envoyé par ludojojo Voir le message
    for(i=StringGrid1->Selection.Left; i>=StringGrid1->Selection.Top; i--)
    Je ne comprend pas ce que tu as voulu faire en écrivant cette ligne, car cela supprime un nombre de ligne qui dépend de la propriété left de la sélection. c'est à dire que si je selectionne des cases en bas à gauche de mon TStringGrid, ma propriété Left sera inférieure à la propriété Top, et donc aucune ligne ne sera supprimée.

    Bon courage

  9. #9
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    J'ai trouvé d'où viens ton problème, tu as tes cellules éditable dans ta grille, ce qui annule le fait de pouvoir faire la multisélection

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

Discussions similaires

  1. Suppression multiple dans DBGrid en Interbase
    Par masterdash dans le forum Bases de données
    Réponses: 11
    Dernier message: 07/11/2012, 10h14
  2. suppression multiple dans form
    Par evevev dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2011, 06h48
  3. [JavaScript] Suppression des multiples dans un tableau (array) alphanumérique
    Par danielhagnoul dans le forum Contribuez
    Réponses: 0
    Dernier message: 07/06/2011, 11h40
  4. suppression multiple dans un treeview
    Par tomkiki dans le forum Delphi
    Réponses: 6
    Dernier message: 09/05/2007, 15h30

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