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 :

Présentation de texte dans un datagridview!


Sujet :

Windows Forms

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut Présentation de texte dans un datagridview!
    Salut!

    J'ai un petit souci de datagridview ce coup ci !

    J'ai créé un datagridview où je place dans une colonne une image et dans l'autre du texte!
    le problème vient du fait de la présentation du texte dans la cellule!
    je voudrais si possible en mettre une partie en gras et une autre partie non-gras à la "ligne" du dessous de ce type:

    The Wall
    PinkFloyd

  2. #2
    Membre confirmé
    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
    Par défaut
    Salut,

    Je ne crois pas me tromper en disant que la DGV te le permettra pas car .. elle est pas faite pour ça !
    Tes deux informations (Artiste et album) sont deux infos distincts donc doivent être dans 2 col. distinctes !
    Ensuite, tu peux modifier le style de tes col. (une en "normal", l'autre en gras)

    Voila voilà

    --
    ElTchoupi

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut
    Merci ElTchoupi, malheureusement je n'ai pas trop le choix de la présentation!
    Il y a t'il un outil qui permette cette présentation?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est possible, mais il faut que tu gères toi-même le rendu de la cellule, avec l'évènement CellPainting.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut
    en utilisant un élément graphique tomlev?
    du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Font f = new Font(leNomDeLaPolice, 15,FontStyle.Bold);
        e.Graphics.DrawString(leTexte1, f, new SolidBrush(Color.Black),
                              e.Bounds);
    Font f = new Font(leNomDeLaPolice, 15);
    e.Graphics.DrawString(leTexte2, f, new SolidBrush(Color.Black),
                              e.Bounds);
    le problème de ce bout de code est que je dessine les deux textes l'un par dessus l'autre!!!!
    je vais voir comme utiliser l'événement cellpainting!

    edit: j'arrive pas à voir quand l'événement se déclenche!!!!

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par NejNej Voir le message
    le problème de ce bout de code est que je dessine les deux textes l'un par dessus l'autre!!!!
    Normal, tu les écris au même endroit (e.Bounds)... il y a d'autres surcharges de DrawString qui permettent de spécifier un point plutôt qu'un rectangle, personnellement je trouve ça plus pratique. Pour dessiner la 2eme chaine, tu as besoin de savoir où se termine la 1ere. Pour ça, utilise e.Graphics.MeasureString.

    Citation Envoyé par NejNej Voir le message
    edit: j'arrive pas à voir quand l'événement se déclenche!!!!
    Quand une cellule a besoin d'être redessinée, par exemple :
    - si ses données ont changé
    - si le DGV a été redimensionné, scrollé, etc
    - si le DGV a été masqué par une autre fenêtre
    ...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut
    bon je vais voir pour la superpositions!

    Sinon j'arrive vraiment pas à déclencher l'événement!
    je l'abonne dans mon designer!
    et j'ai beau changer la taille des cellules, utiliser la scrollbar, rien y fait!

    edit: bon ça s'affiche en haut, visiblement ça prend les point seulement pour le dgv en entier et pas réellement pour la cellule!

    re-edit : à part quand je me e.bounds ça ne m'écrit rien, question e représente la celle ou le dgv???
    j'essaye avec des new PointF(e.Bounds.X,e.Bounds.Y) et new PointF(e.Bounds.X,e.Bounds.Y+17)

    rere : bon je continue, je en peux vérifier mes tests car le graphique n'apparait pas, mais si je clique très vite dans tout les sens il semble qu'il apparaisse et disparaisse très vite quelqu'un à une idée?
    mais rien!

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par NejNej Voir le message
    edit: bon ça s'affiche en haut, visiblement ça prend les point seulement pour le dgv en entier et pas réellement pour la cellule!
    euh... j'ai rien compris

    Citation Envoyé par NejNej Voir le message
    re-edit : à part quand je me e.bounds ça ne m'écrit rien, question e représente la celle ou le dgv???
    j'essaye avec des new PointF(e.Bounds.X,e.Bounds.Y) et new PointF(e.Bounds.X,e.Bounds.Y+17)
    c'est les bounds de la cellule

    Citation Envoyé par NejNej Voir le message
    mais rien!
    c'est à dire ?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut
    on c'est croisé:

    bon je continue, je ne peux vérifier mes tests car le graphique n'apparait pas, mais si je clique très vite dans tout les sens il semble qu'il apparaisse et disparaisse très vite quelqu'un à une idée?
    en faite c'est pas "rien" c'est juste "pas très longtemps du tout"!

    voici le 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
     
    void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            {
    //if pour ne pas écrire dans les cellules avec images
                if (e.CellBounds.Width != 75)
                {
                    PointF p1 = new PointF(e.CellBounds.X, e.CellBounds.Y);
                    PointF p2 = new PointF(e.CellBounds.X, e.CellBounds.Y + 17);
                    Font f = new Font("Arial", 15, FontStyle.Bold);
                    e.Graphics.DrawString("test", f, new SolidBrush(Color.Black), p1);
     
                    f = new Font("Arial", 15);
                    e.Graphics.DrawString("test2", f, new SolidBrush(Color.Black), p2);
     
                }
     
            }

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Si tu dessines une cellule dans l'évènement CellPainting, il faut mettre e.Handled = true pour indiquer qu'elle n'a plus besoin d'être dessinée.
    Sinon, la vérification par rapport à la largeur de la cellule me semble un peu bizarre... si l'utilisateur redimensionne la cellule, ça ne marche plus ! Il vaut mieux utiliser le nom de la colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (dataGridView1.Columns[e.ColumnIndex].Name != "le nom de la colonne")
    ...

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Par défaut
    j'interdis à l'utilisateur de retoucher les colonnes il n'a même pas à savoir qu'il y a "informatiquement" plusieurs colonnes lui c'est à la ligne!

    sinon oui en regardant sur msdn j'ai vu qu'à la fin il y avait le handled=true je l'ai donc mis ça donnait quelque chose de bizarre mais en faite tout au début je dessine le background:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    e.PaintBackground(new Rectangle(e.CellBounds.X, e.CellBounds.Y, e.CellBounds.Width, e.CellBounds.Height), true);
    sinon c'est transparent!

    donc voila résolu et merci beaucoup de ton aide tomlev!

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

Discussions similaires

  1. présentation de texte dans une page web
    Par marsew dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 31/03/2010, 20h07
  2. Selectionner un texte dans un DataGridView
    Par l0quito dans le forum VB.NET
    Réponses: 3
    Dernier message: 27/08/2008, 12h04
  3. Réponses: 8
    Dernier message: 20/08/2007, 17h37
  4. [C#] DataGridView image + texte dans une cellule
    Par nitrous007 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/06/2007, 14h08
  5. [vb 2005]Taille du texte dans datagridview
    Par estelledany dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/06/2006, 15h24

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