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

Langage Delphi Discussion :

Copie rows du StringGrid


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Par défaut Copie rows du StringGrid
    Hello,

    j'ai déjà regardé la FAQ, mais j'aimerais savoir de manière précise, lorsque l'on fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1.Rows[ligne] := StringGrid1.Rows[ligne-1];
    Ce qui se passe avec les objets associés à ligne et à ligne + 1.

    Car le comportement est bizarre : parfois il semble recopier les objets de ligne vers ligne + 1, des fois pas... je m'y perds, dois je recopier moi même les objets à la mimine (comme ça OK : je serais sûr d'avoir les bons objets aux bons endroits) mais j'aimerais quand même avoir vos avis éclairés sur ce sujet.

    Merci.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 165
    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 165
    Par défaut
    Bonne question !
    C'est vrai que la TStringGrid c'est un code assez compliqué, même en lisant le code des Setters et EnsureColRow\EnsureDataRow, j'ai du mal à piger

    As-tu regardé si les objets renvoyés par Rows sont bons ?
    Juste à la lecture de la propriété !
    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 éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Par défaut
    Salut Shail,

    depuis j'ai abdiqué... Je mets en place un système plus simple auquel j'avais songé hier déjà, et confirmé par Guimouille, d'un côté la stringGrid basique sans objets... juste les données affichées à l'écran, de l'autre une StringList interne qui me permet de stocker un index (faisant le lien avec les lignes de la stringGrid) et pour chaque row un objet... plus besoin de copies hasardeuses à la noix.

    L'algo général est lui même plus limpide.

    Dommage que les stringGrid ne permettent pas de gérer les objets de manière plus souple, tout comme il est dommage qu'elles proposent pas une méthode de tri, et une méthode de suppression de row, faut tout se palucher à la main.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 165
    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 165
    Par défaut
    C'est vrai que lorsque j'ai fait ce genre de manip, je parcourais toujours à la main pour exlure les colonnes fixes, donc je n'ai jamais copié de Rows à la sauvage !
    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

  5. #5
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Alors premierement peter, moi c'est Guillemouze, pas Guimouille

    J'utilise pas les StringGrid mais les AdvStringGrid (de TMS), alors je sais pas si ce que je vais te dire s'applique au StringGrid de base.
    Ce que je fais, c'est que je n'ai aucun texte dans ma stringGrid, juste un objet dans la Cell[0, R]. Et sur le OnGetDisplText (c'est sur ce point que peut differer la StringGrid), je vais interroger l'objet de la ligne pour recuperer le texte. Comme ca, j'ai juste a modifier l'objet de ma row, et elle s'actualise automatiquement (apres un repaint).

    Petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure MaAdvStringGridGetDisplText(ACol, ARow: integer; var AText: string; ...);
    begin
      case ACol of
        COL_Nom : AText := TMonObjetDeLigne(MaAdvStringGrid.Objects[0, ARow]).Nom;
        COL_Age : AText := IntToStr(TMonObjetDeLigne(MaAdvStringGrid.Objects[0, ARow]).GetAge);
        ...
      end;
    end;

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 165
    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 165
    Par défaut
    Effectivement, la dernière fois que j'ai géré des objects dans une grille, c'était avec une TStringGrid, juste un affichage banal, le restant étant gérer avec FlexCell (TMS) et Excel

    Lorsque j'ai utilisé la TAdvStringGrid (pour se débarasser de la dépendance à Excel justement) surtout pour la coloration qui est nettement plus simple qu'avec OnDrawCell, j'avais un objet controlleur qui s'occupait de remplir la grille en fonction d'un autre objet (celui-ci était une matrice), j'ai utilisé la propriété Cells pour l'affichage, et je n'avais plus de propriété objects qui devenait trop pénible à gérer !
    Et surtout la Grille n'était manipulé que par une seule et unique fonction du Controlleur et donc tout balayage était manuel dans l'objet matrice, l'affichage était gérer à la fin !

    Pour reproduire OnGetDisplText, faudrait passé par OnDrawCell et en plus faudrait voir avec les OnGetEditText et OnSetEditText lors de la modification d'une cellule, la plaie donc !
    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

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

Discussions similaires

  1. delete row ds Stringgrid : fuite memoire !
    Par sp2308 dans le forum Débuter
    Réponses: 4
    Dernier message: 14/12/2013, 00h33
  2. copie de rows d'un gridview à un autre
    Par Hepil dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/08/2010, 11h52
  3. copié les données de DBGrid dans un StringGrid
    Par faniette dans le forum C++Builder
    Réponses: 12
    Dernier message: 07/11/2009, 18h04
  4. fixed Row d'un stringgrid
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 6
    Dernier message: 27/10/2006, 10h31
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 17h20

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