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

Windows Forms Discussion :

Formatage des Cellules selon leur type dans DGV


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Points : 109
    Points
    109
    Par défaut Formatage des Cellules selon leur type dans DGV
    Bonjour,

    J'utilise des DGV de partout dans une application et j'ai donc besoin de formater leurs cellules assez souvent.
    J'ai créé une classe statique contenant des méthodes (statiques aussi donc) de formatage allant du plus générique ("valeur financière") au plus spécifique ("valeur liquidative untel").
    J'ai donc une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private static void FormatDGVColumFor_VL(DataGridViewColumn aDGVCol, string aVLName)
    qui fait appel à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private static void FormatDGVColumFor_GenericFinancialValue(DataGridViewColumn aDGVCol)
    dans laquelle j'ai le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    aDGVCol.HeaderText = "";
    aDGVCol.Width = 70;
     
    aDGVCol.ValueType = typeof(double);
    DataGridViewCellStyle financialRight = new DataGridViewCellStyle();
    financialRight.Format = "### ### ### ###.00";
    financialRight.Alignment = DataGridViewContentAlignment.MiddleRight;
     
    aDGVCol.DefaultCellStyle = financialRight;
    Mais voilà, dans mon DGV, aucune de mes colones à valeur financière n'est formatée correctement !

    La MSDN parle beaucoup de factoriser le code de formatage pour accélérer l'affichage (qui risque sinon de devenir TRES lent), mais je n'ai rien trouvé sur cette disparition de formatage...
    Qu'est-ce que j'ai oublié ou pas compris ?

    Merci d'avance pour toute aide.
    ElTchoupi

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    Ton DGV est bindé ?
    Ta methode tu l'appelle quand ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  3. #3
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Hello,

    quand appelles tu ces méthodes statiques ? (je suppose que c'est dans le constructeur de ta form / ton user control, on dans son OnLoad)

    Si tu places un point d'arrêt dans ton coe pour voir l'état de tes objets au runtime, est-ce que les colonnes ont bien un DefaultCellStyle défini, avec les valeurs que tu as mises ?

    Et pour ce qui est de la factorisation, une autre façon de faire est de créer son propre type de colonne, en héritant de DataGridViewColumn ; ensuite, dans le designer de DataGridView, tu peux indiquer que telle ou telle colonne n'est plus une DataGridViewtextboxColumn mais le type que tu as créé. Ca n'a aucun lien avec les perfs, d'ailleurs ; ce qui peut détruire les perfs, c'est de tripoter les style au niveau de la cellule / de la row. Mais dans ton scénario, pas de souci.
    ಠ_ಠ

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    quand appelles tu ces méthodes statiques ? (je suppose que c'est dans le constructeur de ta form / ton user control, on dans son OnLoad)
    Ces methode ne peuvent etre apellées que quand les colonnes du DGV sont définies

    Si le DGV est bindé c'est dans l'event DataBindingComplete !!
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  5. #5
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par olibara Voir le message
    Si le DGV est bindé c'est dans l'event DataBindingComplete !!
    C'est une façon de faire classique, mais pour répondre au mieux à ElTchoupi, il vaut mieux avoir le plus de détail sur sa façon de faire, plutôt que de faire des hypothèses, quitte à demander des trucs basiques
    ಠ_ಠ

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    Merci pour vos réponses: ça me donne un nouvel éclairage sur les DGV..
    Dans le cas qui nous interesse ici, je fais la customisation des colonnes après avoir fait le DataBinding:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dgvShares.DataSource = mSharesDV;
    DataGridViewHelpers.SetDGVDefaultDynamicCustomization(dgvShares);
    D'après ce que j'ai pu voir:
    - Quand je Bind une DataView à mon DGV, les colonnes sont créees, et je dois donc, ensuite, les modifier selon ce que je veux (le rôle de mes méthodes statiques).
    - Quand je Bind une liste d'objets métiers, je dois créer mes colonnes à la main ... avant le binding (du coup, j'ai du code presque dupliqué)

    Mais je n'ai pas pensé à utiliser les evenements de mes DGV, ça doit probablement permettre beaucoup plus de propreté...
    Le coup des colonnes héritées m'interesse aussi beaucoup.. est-ce que je peux utiliser une méthode similaire au Bind de mon DGV (donc pas en mode design mais en dynamique) ?

    Ces quelques questions .. basiques (cf aussi mon autre post sur le BindingListView ) me font dire que je n'ai peut-être pas abordé les DGV par le bon angle: si quelqu'un a une bonne source de formation, je prends !
    ElTchoupi

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par ElTchoupi Voir le message
    Quand je Bind une liste d'objets métiers, je dois créer mes colonnes à la main ... avant le binding (du coup, j'ai du code presque dupliqué)
    Pas forcément. Dans le designer, tu peux indiquer que la source de ta grille est le type d'un objet, et tu peux alors définir les colonnes dans le designer.
    ಠ_ಠ

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Points : 109
    Points
    109
    Par défaut
    Mais je ne me sert pas du designer: en fonction des interactions, la DataSource ne contient pas toujours les mêmes données (je veux dire, n'est pas constitué des mêmes colonnes).
    ElTchoupi

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Points : 109
    Points
    109
    Par défaut
    Pour fermer le sujet en expliquant la solution retenue:

    J'ai fini par opter pour l'option "créer mes colonnes à la mano" tout le temps: quand je bind mes DGV, si j'ai bien renseigné ma "DataPropertyName", il retrouve ses petits comme un grand, c'est nickel.

    Du coup, j'ai créé des méthodes de génération de colones par types (texte, numerique, booleen..) que je spécialise pour mes utilisation diverses, ça tourne pas mal, pas encore eu de probleme...


    Merci encore à tous pour votre aide et vos axes de reflection !

    Si quelqu'un veut avoir plus de détails, qu'il n'hésite pas à me contacter, même si je ferme le thread...
    ElTchoupi

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

Discussions similaires

  1. Ranger des fichiers selon leur type
    Par Battant dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 17/06/2015, 08h08
  2. Réponses: 7
    Dernier message: 11/10/2011, 17h54
  3. [Débutant] supprimer des éléments selon leur type
    Par r0d dans le forum C#
    Réponses: 10
    Dernier message: 22/06/2011, 09h24
  4. [WD-2007] Réordonner des mots dans une phrase selon leur type
    Par pbeecham dans le forum VBA Word
    Réponses: 3
    Dernier message: 15/03/2011, 10h50
  5. Dénombrer des cellules selon leurs couleurs avec formule
    Par Paenitentia dans le forum Excel
    Réponses: 5
    Dernier message: 14/03/2011, 14h38

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