none
Couleur dans une datagridview RRS feed

  • Question

  • Bonjour,

    J'utilise une datagridview, alimentée par une Table de SQL Serveur. Une colonne de cette table contient une valeur décimal qui représente une couleur, et je dois mettre le texte de la ligne correspondante dans cette couleur. Une deuxième colonne contient une valeur (décimale) pour la couleur du fond de la ligne.

    Comment mettre le texte de la ligne dans la couleur défini par la valeur décimale? de meme pour la couleur du fond?

    Need Help

    vendredi 30 avril 2010 06:26

Réponses

  • Bonjour,

    une autre possibilité est d'utiliser l'évènement CellFormating. Voici un exemple pour appliquer une couleur de fond:

    Public Sub New()
    
      ' This call is required by the Windows Form Designer.
      InitializeComponent()
    
      'Création d'une datatble source de données de la DataGridView
      Dim table As New DataTable
      Dim row As DataRow
      table.Columns.Add("col1", GetType(String))
      table.Columns.Add("col2", GetType(Decimal))
    
      For i As Integer = 0 To 3
        row = table.NewRow()
        row.Item("col1") = String.Format("Valeur{0}", i)
        row.Item("col2") = i
        table.Rows.Add(row)
      Next
    
      Me.DataGridView1.DataSource = table
    
    End Sub
    
    Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    
      'pour la colonne 1
      If e.ColumnIndex = 1 Then
    
        'cast du sender en DataGridView
        Dim grid As DataGridView = TryCast(sender, DataGridView)
        Dim iColorFont As Decimal
    
        If grid IsNot Nothing Then
    
          'valeur de la cellule
          iColorFont = grid(e.ColumnIndex, e.RowIndex).Value
    
          'couleur de fond
          Select Case iColorFont
            Case 0
              e.CellStyle.BackColor = Color.AliceBlue
            Case 1
              e.CellStyle.BackColor = Color.Tomato
            Case 2
              e.CellStyle.BackColor = Color.Tan
            Case 3
              e.CellStyle.BackColor = Color.Silver
            Case Else
              e.CellStyle.BackColor = Color.White
          End Select
        End If
      End If
    
    End Sub
    
    Cordialement

    • Marqué comme réponse jperigny vendredi 30 avril 2010 16:01
    vendredi 30 avril 2010 11:04
    Modérateur
  • Bonjour,

    Si vos données ne sont pas changées par l'utilisateur, faites une boucle qui parcourt votre DataGridView et qui change la couleur de la cellule en question.

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse jperigny vendredi 30 avril 2010 15:50
    vendredi 30 avril 2010 06:51
    Modérateur
  • Bonjour,

    je ne comprends pas bien le problème si la couleur est défini via la valeur argb et que celle-ci est stockée en base il possible d'obtenir la couleur depuis la valeur argb via : System.Drawing.Color.FromArgb( )

    Cordialement

    • Marqué comme réponse jperigny vendredi 30 avril 2010 18:48
    vendredi 30 avril 2010 16:15
    Modérateur

Toutes les réponses

  • Bonjour,

    Si vos données ne sont pas changées par l'utilisateur, faites une boucle qui parcourt votre DataGridView et qui change la couleur de la cellule en question.

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse jperigny vendredi 30 avril 2010 15:50
    vendredi 30 avril 2010 06:51
    Modérateur
  • Bonjour,

    une autre possibilité est d'utiliser l'évènement CellFormating. Voici un exemple pour appliquer une couleur de fond:

    Public Sub New()
    
      ' This call is required by the Windows Form Designer.
      InitializeComponent()
    
      'Création d'une datatble source de données de la DataGridView
      Dim table As New DataTable
      Dim row As DataRow
      table.Columns.Add("col1", GetType(String))
      table.Columns.Add("col2", GetType(Decimal))
    
      For i As Integer = 0 To 3
        row = table.NewRow()
        row.Item("col1") = String.Format("Valeur{0}", i)
        row.Item("col2") = i
        table.Rows.Add(row)
      Next
    
      Me.DataGridView1.DataSource = table
    
    End Sub
    
    Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    
      'pour la colonne 1
      If e.ColumnIndex = 1 Then
    
        'cast du sender en DataGridView
        Dim grid As DataGridView = TryCast(sender, DataGridView)
        Dim iColorFont As Decimal
    
        If grid IsNot Nothing Then
    
          'valeur de la cellule
          iColorFont = grid(e.ColumnIndex, e.RowIndex).Value
    
          'couleur de fond
          Select Case iColorFont
            Case 0
              e.CellStyle.BackColor = Color.AliceBlue
            Case 1
              e.CellStyle.BackColor = Color.Tomato
            Case 2
              e.CellStyle.BackColor = Color.Tan
            Case 3
              e.CellStyle.BackColor = Color.Silver
            Case Else
              e.CellStyle.BackColor = Color.White
          End Select
        End If
      End If
    
    End Sub
    
    Cordialement

    • Marqué comme réponse jperigny vendredi 30 avril 2010 16:01
    vendredi 30 avril 2010 11:04
    Modérateur
  • Merci pour la réponse, cela permet toujours de réfléchir, mais, ce n'est pas ce que je voudrais. En fait, les couleurs sont au préalable stockée avec un formulaire de paramétrage, ou l'utilisateur sélectionne SA COULEUR avec le formulaire ColorDialog, et cette couleur est stocké dans la table SQL. La valeur est décimal, et c'est un Integer, un 32-bits ARGB..

    Mon soucis est de reprendre Cette valeur pour afficher la couleur.

    Remerciements,

    vendredi 30 avril 2010 16:00
  • Bonjour,

    je ne comprends pas bien le problème si la couleur est défini via la valeur argb et que celle-ci est stockée en base il possible d'obtenir la couleur depuis la valeur argb via : System.Drawing.Color.FromArgb( )

    Cordialement

    • Marqué comme réponse jperigny vendredi 30 avril 2010 18:48
    vendredi 30 avril 2010 16:15
    Modérateur
  • J'ai essayé, mais je n'ai pas eu le resultat souhaité, peut-être que je m'y suis mal pris.

    Je cherche des exemples utilisant argb ...

    Remerciements,

    vendredi 30 avril 2010 18:48
  • Bonjour,

    Pouvez-vous nous indiquer une valeur d'une couleur qui ne fonctionnerait pas avec la méthide Color.FromArgb() ?

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    samedi 1 mai 2010 22:34
    Modérateur
  • Bonjour,

    Voici le code de la récupération de la couleur choisie :

     

    Private Sub Button_TextColorSelection_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_TextColor.Click

     

    ' selection d'une couleur

     

    'Appel de la fentre de choix des couleurs

     

    Dim colorValue As Integer

     

    With ColorDialog_Selection

     

    If Not String.IsNullOrEmpty(TB_TextColor.Text) Then

     

    'Initialisation couleur

    .Color = TB_TextColor.ForeColor

     

    End If

     

    'rcupration de la couleur choisie

     

    If .ShowDialog() = Windows.Forms.DialogResult.OK Then

    colorValue = .Color.ToArgb

    TB_TextColor.Text = colorValue.ToString() ' Affiche la valeur numérique dans la zone 

    TB_TextColor.ForeColor = .Color

    ' .Color le texte

     

    End If

     

    End With

     

    End Sub

    Une valeur stockée : -65536 ... correspondrait a un rouge

    dimanche 2 mai 2010 07:18
  • Merci a tous,

    J'ai réussi a trouver quelque chose a partir du code de Nikho.

    Cordialement,

    dimanche 2 mai 2010 07:47