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

VB.NET Discussion :

Modification de DataGridView en fonction des valeurs de cellule


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2012
    Messages : 33
    Par défaut Modification de DataGridView en fonction des valeurs de cellule
    Bonjour,

    Je voudrais modifier l'apparence de certaines cellules en fonction des valeurs récupérées de ma base.
    test1-Colorer une cellule.
    test2-Remplacer une texte par une image.

    J'ai trouvé beaucoup d'exemples et d'explications sur le net.
    Là, je me base sur un exemple fourni par MS. Je comprends bien le code et celui-ci semble s'appliquer correctement... jusqu'à un certain point. Et je bloque.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
        ' Modifier l'affichage des cellules en fonction de leur valeur
        Private Sub dataGridView1_CellFormatting(ByVal sender As Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
            Handles DataGridView1.CellFormatting
     
            '*********************************************
            ' colore la cellule en fonction de sa valeur.
            '*********************************************
            If DataGridView1.Columns(e.ColumnIndex).Name.Equals("page") Then
     
                'Si le numéro de page < 100 --> On colore la cellule en rouge
                If CInt(e.Value) < 100 Then
                    e.CellStyle.BackColor = Color.Red
                    e.CellStyle.SelectionBackColor = Color.DarkRed
                End If
            End If
     
            '**************************************************
            ' Remplace les valeurs d'une chaine par une image.
            '**************************************************
            Dim MonIMAGE = New Bitmap("impr.jpg")
     
            If DataGridView1.Columns(e.ColumnIndex).Name.Equals("impr") Then
     
                ' On vérifie que la valeur est une chaine
                Dim stringValue As String = TryCast(e.Value, String)
                If stringValue Is Nothing Then Return
     
                ' On place la valeur du texte en ToolTip
                Dim cell As DataGridViewCell = _
                    DataGridView1(e.ColumnIndex, e.RowIndex)
                cell.ToolTipText = stringValue
     
                ' Remplace la chaine par l'image
                Select Case stringValue
     
                    Case "ok"
                        e.Value = MonIMAGE '--> Affiche "System.Drawind.Bitmap" au lieu de l'image
                End Select
     
            End If
     
        End Sub
    Pour le test 1, à savoir, colorer la cellule en fonction de sa valeur... Pas de problème.
    Par contre, le test 2, l'affichage de l'image ("impr.jpg") en fonction de la valeur de la cellule ("ok") bloque.

    Il remplace bien les cellules, mais au lieu de mettre l'image, il m'affiche "System.Drawind.Bitmap"
    Si je passe par un icône (MonICONE = New icon("impr.ico")), il m'affiche à la place du "ok", "(icône)"

    J'ai placé mes fichiers jpg et ico dans le répertoire de l'application

    Qu'ai je oublié, qu'est ce qui bloque ?

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour,

    il vous faut rajouter une colonne de type image : DataGridViewImageColumn
    et masquer la colonne contenant le texte.
    Il est normal qu'en essayant de placer une image dans une colonne faite pour contenir du texte il affiche la méthode toString de l'objet stocké qui est ça seul représentation textuelle.

    Voici un petit lien MSDN sur tous les types de colonne du dataGridView

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2012
    Messages : 33
    Par défaut
    Merci pour ta réponse...

    En fait, c'est un peu ce que j'essayais de faire.
    Ce que tu m'as dit m'a paru clair et m'a conforté dans le fait que j'étais (plutôt) sur la bonne voie...
    Pourtant j'ai passé l'après-midi et la soirée à essayer de me dépatouiller (j'aime bien chercher et trouver)...

    Mais là, j'y comprend plus rien, j'ai la tête en vrac...

    Pour résumer, si je crée le DataGridView et ses colonnes, j'arrive à utiliser des images en fonction des valeurs d'une autre colonne... Ca ça fonctionne.
    Par contre, quand je dessine un DGView et que je le remplie avec les valeur de ma base access, je n'arrive pas à faire correspondre ma colonne texte avec cette fichue colonne image...

    Je suis sûr que la solution est là, que je ferai mieux de laisser tomber et de reprendre ça à tête reposée...

    Je continue à chercher... Mais si quelqu'un peut me donner une piste, un exemple simple ou un flingue, c'est pas de refus...

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Tu peux afficher l'image en gérant l'event CellPainting du DataGridView :

    Code en C#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Image imgA = Image.FromFile(@"C:\imageA.gif");
    Image imgB = Image.FromFile(@"C:\imageB.gif");
     
    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            {
                if (dataGridView1.Columns[e.ColumnIndex].Name=="Ma_colonne_avec_images")
               {
                   if ((string)e.Value=="A") { e.Graphics.DrawImage(imgA, e.CellBounds); e.Handled = true; }
                   if ((string)e.Value=="B") { e.Graphics.DrawImage(imgB, e.CellBounds); e.Handled = true; }
                }
            }

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2012
    Messages : 33
    Par défaut
    Merci pour le code... Je comprends et arrive à transposer en VB.

    Mais mon principal problème vient plutôt du fait que je n'arrive pas à créer ma colonne image lorsque les données viennent d'une base.
    Mon DataGridView n'affiche que les colonnes "existantes".

    Je déclare chaque colonne texte (0 à 6) en vue de formatage et une colonne image (7) en plus :

    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
            'Mise en forme de la colonne note
            Dim idColumn6 As New DataGridViewTextBoxColumn()
            idColumn6 = DataGridView1.Columns("note")
            With idColumn6
                .HeaderText = "note"
                .ToolTipText = "les notes"
                '.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                .Resizable = DataGridViewTriState.False
                .Width = 50
                .ReadOnly = True
                .Visible = False
            End With
     
            '*********************************************
            Dim idColumn7 As New DataGridViewImageColumn()
            With idColumn7
                .Name = "impr000"
                .ImageLayout = DataGridViewImageCellLayout.Zoom
            End With

    Les colonnes texte sont bien formatées, celles que je veux, apparaissent bien, mais la colonne "7" (image) ne veux pas apparaître (j'ai essayé aussi un AddRange...)...
    J''ai l'impression, à force de chercher, que je mélange plusieurs trucs...

    Pouvez-vous m'aiguiller... Je comprend plus rien...

  6. #6
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    DataGridView.AutoGenerateColumns :
    Obtient ou définit une valeur indiquant si les colonnes sont créées automatiquement lorsque les propriétés DataSource ou DataMember sont définies.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/02/2008, 14h32
  2. Réponses: 2
    Dernier message: 13/12/2007, 15h02
  3. cocher une case en fonction des valeurs sur plusieurs plages
    Par flyfranky dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 15/11/2007, 10h20
  4. Réponses: 4
    Dernier message: 06/03/2007, 13h35
  5. mettre à jour un dataset en fonction des valeurs qu'il contient ?
    Par isachat666 dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/06/2006, 13h03

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