簡體   English   中英

DataGridView單元格BackColor格式不正確

[英]DataGridView cell BackColor not formatting correctly

我的應用程序中有一個datagridview,其中列出了活動的作業。 列之一具有狀態碼(0-5),並且行根據該值而被着色,例如...

     joblist.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Aquamarine
     joblist.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Black

如果狀態代碼為0,則不應用顏色。

該位在大多數情況下都可以正常工作,但是我發現,如果它涉及到多個狀態為0的作業,則這些作業將呈現狀態1-5的最后一個作業的顏色。

我可以通過添加...來解決此問題

     elseif status=0 then
     joblist.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Aquamarine
     joblist.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Black
     end if

但是,這會抹掉我的其他行的顏色,因此,如果有大量白色行,它們將變得難以閱讀。

有什么辦法可以說...

  if status=0 then
  joblist.Rows(e.RowIndex).DefaultCellStyle.BackColor = DefaultCellStyle.BackColor
  joblist.Rows(e.RowIndex).DefaultCellStyle.ForeColor = DefaultCellStyle.BackColor

...或其他什么,以便將相關行基本上恢復為默認或替代默認樣式?

您的摘要內容不多。 例如,我們不知道您正在使用哪個事件,並且有幾個不錯的候選對象。 如果DGV是只讀的或無法更改單元格的值,則RowPrePaint是一個很好的選擇,因為行顏色將僅設置一次。 如果可以更改,那么CellFormatting對我來說更有意義。

無論哪種方式,要重新設置它們,都可以進行簡單的計算並使用DefaultCellStyle顏色。 MistyRoseMistyRose的狀態設置為3,如果該行更改為其他值,則將其設置為該行的默認值:

If e.ColumnIndex = 2 Then
    If DirectCast(e.Value, Int32) = 3 Then
        dgv1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.MistyRose
    Else
        Dim clr = If(e.RowIndex Mod 2 = 0, dgv1.DefaultCellStyle.BackColor,
                     dgv1.AlternatingRowsDefaultCellStyle.BackColor)
        dgv1.Rows(e.RowIndex).DefaultCellStyle.BackColor = clr
    End If
End If

初始結果( Consilk顏色是交替行的背景色):

在此處輸入圖片說明

然后,如果我更改第二條玫瑰色行的狀態,則它正確使用AlternatingBackColor

在此處輸入圖片說明

暫無
暫無

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

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