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 :

suppression de ligne définitive dans stringgrid


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 27
    Points
    27
    Par défaut suppression de ligne définitive dans stringgrid
    Bonjour ;

    j'ai un composant stringgrid que j'étend dynamiquement (initialement, il contient une seule ligne et j'ajoute en cours d'exécution des lignes) lorsque je ferme cette fiche, je supprime ces lignes pour revenir à un état initial en utilisant les instructions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while sgrid1.RowCount-1>0 do TPublicStringGrid(SGrid1).DeleteRow(sgrid1.RowCount-1);
    sgrid1.Cells[0,0]:='';
    sgrid1.RowCount:=1;
    le problème est que quand je recrée de nouvelles lignes dans ce stringgrid, elles sont créées non pas vierges mais contenant leurs anciennes valeurs.

    j'ai pensé mettre toutes les valeurs du stringgrid à la chaine vide puis à supprimer les lignes mais je voudrai trouver une méthode plus élégante pour effacer définitivement une ligne.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 795
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 795
    Points : 15 208
    Points
    15 208
    Par défaut
    'lut !
    C'est quoi, ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while sgrid1.RowCount-1>0 do TPublicStringGrid(SGrid1).DeleteRow(sgrid1.RowCount-1);
    Pourquoi pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while sgrid1.RowCount-1>0 do SGrid1.DeleteRow(sgrid1.RowCount-1);
    ? J'ai rien testé, c'est juste une question sur un truc qui me rend perplexe.
    Pour tester plus, faudrait du code et j'ai la flemme d'en pondre...
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    SGrid1.DeleteRow(sgrid1.RowCount-1) ne marche pas, voir le lien suivant :
    http://www.developpez.com/delphi/faq...ucolstringgrid

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Si ton StringGrid se nomme bien SGrid1, essaye comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TCustomGrid(SGrid1).DeleteRow(SGrid1.RowCount-1);
    @+ Claudius

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    en fait ça revient à ce que j'ai fait, j'avais oublié de préciser que j'avais déclaré :
    TPublicStringGrid = class(TCustomGrid);
    puis j'ai mis :
    TPublicStringGrid(SGrid1).DeleteRow(sgrid1.RowCount-1);

    Mais mon problème ce n'est pas cette instruction, c'est que la suppression opérée par cette suppression n'est pas définitive, dans le sens où quand je réinsère une ligne après suppression, la ligne créée contient la valeur de la ligne supprimée auparavant. une solution serait de vider la ligne avant de la supprimer en faisant :
    SGrid1.cells[0, RowCount-1]:=''
    mais comme je fais la suppression de plusieurs lignes à la fois, je voudrai une solution plus élégante

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 795
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 795
    Points : 15 208
    Points
    15 208
    Par défaut
    Ben alors, faudrait aller voir ce que fait le code de DeleteRow dans Grids.pas (que je n'ai pas, édition perso ), parce que si l'aide dit bien que ça supprime,
    peut-être que ça ne fait que cacher ?
    (encore que, si après tu fais des "Add", c'est comme si ça se transformait en "show" ? Bizarre, ça...)

    Que dit un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(IntToStr(SGrid1.RowCount));
    en fin de boucle de suppression ?

    Mes 2 cts et joyeux Noël !
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    ShowMessage(IntToStr(SGrid1.RowCount)) retourne 1 , je laisse toujours une ligne

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 795
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 795
    Points : 15 208
    Points
    15 208
    Par défaut
    Yep, Linda !

    Je crois que tu devrais faire une 'tite maquette pour tester le 'blème, un tout 'tit truc avec juste une form, ta grille, un bouton pour la vider un bouton pour la remplir avec du bidon (remplissage initial au FormCreate), qu'on puisse voir (flemme de faire ce code... )
    Et tu postes ce code.
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Je crois que vous allez trouver votre bonheur en vous rendant ici
    http://delphi.developpez.com/faq/?pa...ignestringgrid
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 37
    Points : 27
    Points
    27
    Par défaut
    Aka Guymelef, ce qui est dans le lien correspnd à ce que j'ai fait.

    j'ai mis au point une petite maquette ci-joint, qui montre que l'instruction : TPublicStringGrid(SGrid1).DeleteRow(lig); ne fait que cacher une ligne et que pour ne pas voir réapparaitre les valeurs de la ligne supprimée en cas d'insertion d'une nouvelle ligne, il faut vider la ligne avant de la supprimer par l'instruction : sgrid1.Cells[0,lig]:=''; (qui est en commentaire dans le source)

    je crois que je vais me résigner à cette astuce.
    Fichiers attachés Fichiers attachés

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    En effet, ça ne supprime pas la ligne ...Les données persistent.

    Je pense que tu seras obligé de passer par un vidage... Néanmoins, je te propose d'utiliser une autre syntaxe pour vider une ligne :

    A la place de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sgrid1.Cells[0,lig]:='';
    Utilise celà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SGrid1.Rows[lig].Clear;
    Ca aura pour effet de supprimer la ligne entière et non une cellule d'une ligne comme le fait ton code précédent

    A+

Discussions similaires

  1. [XL-2010] Suppression de lignes vides dans un range donné
    Par titideszalpes dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/06/2015, 09h25
  2. Suppression de lignes dans un StringGrid
    Par ammapro dans le forum Composants VCL
    Réponses: 3
    Dernier message: 15/01/2015, 13h57
  3. Suppression de lignes blanches dans un fichier texte
    Par supcomingenieur dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 15/05/2013, 22h42
  4. [PHP 5.0] Suppression de lignes cochées dans un formulaire
    Par wolfdream dans le forum Langage
    Réponses: 4
    Dernier message: 06/02/2009, 10h27
  5. Réponses: 4
    Dernier message: 02/07/2004, 19h14

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