簡體   English   中英

根據列值使 DataGridView 行具有某種顏色

[英]Making DataGridView rows a certain color based on a column value

我正在使用 vb.net,我有數據進入我的 DGV,如果它是“1”,我有一個標記為已部署的列,我希望在已部署的列 RED 中包含所有帶有“1”的行,如果它是“0” ',我希望所有的行都是綠色的。 這是我的方法,現在該列是第 10 列,但它不喜歡 = 運算符。 即使我在 1 上使用引號與字符串的等於比較運算符。 應該是一個整數,但我正在盡我所能了解它為什么不起作用。

Private Sub LaptopGrid_CellFormatting(ByVal Sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles LaptopGrid.CellFormatting
    For i As Integer = 0 To LaptopGrid.Rows.Count - 1
        If LaptopGrid.Rows(i).Cells(9).Value = 1 Then
            LaptopGrid.RowsDefaultCellStyle.BackColor = Color.Green
        End If
    Next
End Sub

您的代碼有幾個問題。

首先,您正在處理CellFormatting事件,但您正在迭代每一行以設置背景色。 該事件旨在讓您對單個特定單元格執行某些操作,有問題的事件在事件參數中指示: e.RowIndexe.ColumnIndex 使用循環,您正在處理比需要多得多的行,並且一遍又一遍地這樣做。

其次,VB 有數據類型。 Int32是一種類型, String是另一種,而Object是另一種。 在比較之前,您需要將一種類型轉換為另一種類型。 LaptopGrid.Rows(r).Cells(c).Value返回Object (因為單元格實際上可以容納任何東西),因此要與1進行比較,您需要將其轉換為整數。

最后,您可能不希望CellFormatting事件。 如果有問題的單元格不在屏幕上,則不會觸發該事件(可能是用戶調整了列的大小)。 另一方面,當行滾動到視圖中時, RowPrePaint將觸發。

Private Sub dgv1_RowPrePaint(sender As Object, 
                   e As DataGridViewRowPrePaintEventArgs) Handles dgv1.RowPrePaint

    ' dont do the NewRow
    If e.RowIndex < 0 OrElse dgv1.Rows(e.RowIndex).IsNewRow Then Return

    ' convert to int32, then compare
    ' act on just this row - e.RowIndex
    If Convert.ToInt32(dgv1.Rows(e.RowIndex).Cells(3).Value) > 3 Then
        dgv1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LemonChiffon
    Else
        dgv1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.MistyRose
    End If

End Sub

在此處輸入圖片說明

如果用戶可以編輯該單元格值,您將需要相應地更新背景顏色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM