[英]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
顏色。 這MistyRose
行MistyRose
的狀態設置為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.