web-dev-qa-db-fra.com

Modifier la couleur de la ligne dans DataGridView en fonction de la quantité d'une valeur de cellule

J'ai besoin de changer la couleur d'une ligne dans datagridview mais mon code ne fonctionne pas pour moi . Je reçois toujours une erreur disant "La colonne nommée Quantité: est introuvable. Nom du paramètre: nomcolonne" 

Voici mon code:

Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1
        If Me.DataGridView1.Rows(i).Cells("Quantity:").Value < 5 Then
            Me.DataGridView1.Rows(i).Cells("Quantity:").Style.ForeColor = Color.Red
        End If
    Next
End Sub

S'il vous plaît aidez-moi à le réparer. Je vous remercie.

7
Rara Arar

J'ai corrigé mon erreur. vient de supprimer "Value" de cette ligne:

If drv.Item("Quantity").Value < 5  Then

Alors ça va ressembler

If drv.Item("Quantity") < 5 Then

3
Rara Arar

Cela pourrait être utile

  1. Utilisez l'événement "RowPostPaint"
  2. Le nom de la colonne n'est PAS "l'en-tête" de la colonne. Vous devez aller dans les propriétés du DataGridView => puis sélectionner la colonne => puis rechercher la propriété "Nom"

J'ai converti cela en C # ('De: http://www.dotnetpools.com/Article/ArticleDetiail/?articleId=74 )

    Private Sub dgv_EmployeeTraining_RowPostPaint(sender As Object, e As System.Windows.Forms.DataGridViewRowPostPaintEventArgs) 
    Handles dgv_EmployeeTraining.RowPostPaint

    If e.RowIndex < Me.dgv_EmployeeTraining.RowCount - 1 Then
        Dim dgvRow As DataGridViewRow = Me.dgv_EmployeeTraining.Rows(e.RowIndex)

    '<== This is the header Name
        'If CInt(dgvRow.Cells("EmployeeStatus_Training_e26").Value) <> 2 Then  


    '<== But this is the name assigned to it in the properties of the control
        If CInt(dgvRow.Cells("DataGridViewTextBoxColumn15").Value.ToString) <> 2 Then   

            dgvRow.DefaultCellStyle.BackColor = Color.FromArgb(236, 236, 255)

        Else
            dgvRow.DefaultCellStyle.BackColor = Color.LightPink

        End If

    End If

End Sub
12
glenn garson

Essayez ceci (Remarque: je n'ai pas maintenant Visual Studio, le code est donc copier-coller depuis mes archives (je ne l'ai pas testé):

Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    Dim drv As DataRowView
    If e.RowIndex >= 0 Then
        If e.RowIndex <= ds.Tables("Products").Rows.Count - 1 Then
            drv = ds.Tables("Products").DefaultView.Item(e.RowIndex)
            Dim c As Color
            If drv.Item("Quantity").Value < 5  Then
                c = Color.LightBlue
            Else
                c = Color.Pink
            End If
            e.CellStyle.BackColor = c
        End If
    End If
End Sub
1
Nianios

Supprimez simplement le : dans votre Quantity. Assurez-vous que votre attribut est identique au paramètre que vous incluez dans le code, comme ceci:

Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1
        If Me.DataGridView1.Rows(i).Cells("Quantity").Value < 5 Then
            Me.DataGridView1.Rows(i).Cells("Quantity").Style.ForeColor = Color.Red
        End If
    Next
End Sub
1
Jonel Taruc
Dim dgv As DataGridView = Me.TblCalendarDataGridView

For i As Integer = 0 To dgv.Rows.Count - 1
    For ColNo As Integer = 4 To 7
        If Not dgv.Rows(i).Cells(ColNo).Value Is DBNull.Value Then

            dgv.Rows(i).Cells(ColNo).Style.BackColor =  vbcolor.blue
        End If
    Next
Next
0
user6533074
If drv.Item("Quantity").Value < 5  Then

utiliser ceci pour aimer ceci

If Cint(drv.Item("Quantity").Value) < 5  Then
0