2012-11-14 231 views
7

我需要更改datagridview中行的顏色,但我的代碼不適合我。 我總是寫着一個錯誤「列命名數量:無法找到參數名稱:列名」根據單元格的數量更改DataGridView中的行顏色

這裏是我的代碼:

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 

請幫我解決這個問題。謝謝。

+0

使用我的以下回答鏈接進行日期範圍比較 http://stackoverflow.com/a/29486288/3583859 –

回答

2

我固定我的錯誤只是刪除。 「值」 從這一行:

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

所以它看起來像

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

+0

對不起,我在旅途中。所以我現在無法幫助你。我希望你的修復,解決了你的問題 – Nianios

1

試試這個(注:我沒有現在的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 
+0

非常感謝您的回答,但我有幾個關於您的答案的問題:) 它顯示此錯誤: 對象引用未設置爲對象的實例。 和「產品」是指?它是數據源的名稱嗎? –

+0

ds.Tables(「Products」)是填充datagridview的表格。 所以把你的餐桌上的名字 – Nianios

+0

Thankyou HaBouF。我得到的錯誤怎麼樣?我該如何解決這個問題? –

11

這可能是有益的

  1. 使用「RowPostPaint」事件
  2. 列的名稱不是列的「頭」。你必須去爲DataGridView的屬性=>然後選擇欄=>然後尋找

我轉換這從C#(「來源: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 
0
If drv.Item("Quantity").Value < 5 Then 

使用這種喜歡這個

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

只需卸下: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 
0

使用CellFormating事件Ë說法:

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

0
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

請添加你的解答 – STF

相關問題