web-dev-qa-db-ja.com

セル値の数量に基づいてDataGridViewの行の色を変更する

Datagridviewの行の色を変更する必要がありますが、コードが機能しません。 「Quantityという名前の列が見つかりません。パラメーター名:columnName」というエラーが常に表示されます。

これが私のコードです:

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

修正を手伝ってください。ありがとうございました。

7
Rara Arar

エラーを修正しました。この行から「値」を削除しました:

_If drv.Item("Quantity").Value < 5  Then
_

だからそれは次のようになります

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

3
Rara Arar

これは役に立ちます

  1. 「RowPostPaint」イベントを使用する
  2. 列の名前は、列の「ヘッダー」ではありません。 DataGridViewのプロパティに移動する必要があります=>次に列を選択=>次に、「名前」プロパティを探します

これをC#から変換しました( 'From: 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

これを試してください(注:現在Visual Studioがないので、コードはアーカイブからコピーして貼り付けます(テストしていません)。

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

Quantity:を削除するだけです。次のように、属性がコードに含めるパラメータと同じであることを確認してください。

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

これを好きに使う

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

CellFormatingイベントおよびe引数を使用します。

If CInt(e.Value) < 5 Then e.CellStyle.ForeColor = Color.Red

0
Elian