VS2008 / .NET 3.5 winforms项目中的DataGridView控件存在一个非常奇怪的问题。我有一个带网格的简单表格。在表单构造函数中,我调用一个函数将grind绑定到DataTable,然后遍历行,将最后一个单元格的背景颜色设置为LightGrey,如果列值为true,则将单元格本身设置为只读。在表单完成加载后,代码不起作用,即单元格未设置为LightGrey并且不是只读的(即使我单步执行代码,我可以看到正在设置的属性)。然后我再次从一个按钮调用该函数,但这次颜色变为LightGrey,单元格变为只读,即代码可以工作。
CODE:
Dim dgr As DataGridViewRow
For i_DsRow As Integer = 0 To ds.Tables(0).Rows.Count - 1
dr = ds.Tables(0).Rows(i_DsRow)
For i_row As Integer = 0 To DgSearch.Rows.Count - 1
dgr = DgSearch.Rows(i_row)
If dr("DsColoumn1").ToString.ToUpper = dgr.Cells("DgColoumn1").Value.ToString.ToUpper Then
If Val(dr("Coloumn2").ToString) = 3 Then
dgr.Cells("SomeColomname").Value = dr("SomeColoumName2").ToString
If dgr.Cells("SomeColomname3").Value.ToString <> "" Then dgr.Cells("SomeColomname3").Value &= ", "
dgr.Cells("SomeColomname3").Value &= dr("SomeColoumName2").ToString
SetCellColor(dgr.Cells("SomeColomname"), dgr.Cells("SomeColomname3"))
End If
Exit For
End If
Next
Next
Private Sub SetCellColor(ByVal resultCell As DataGridViewCell, ByVal ColorCell As DataGridViewCell)
If resultCell.Value.ToString().ToUpper = "A".ToUpper Or resultCell.Value.ToString().ToUpper = "B".ToUpper Then
ColorCell.Style.BackColor = Color.FromName("Red")
ElseIf resultCell.Value.ToString().ToUpper = "C".ToUpper Or resultCell.Value.ToString().ToUpper = "D".ToUpper Then
ColorCell.Style.BackColor = Color.FromName("MediumSeaGreen")
Else
ColorCell.Style.BackColor = Color.FromName("Yellow")
End If
End Sub
答案 0 :(得分:1)
感谢您添加代码。我建议将所有格式都放在DataGridView的CellFormatting事件中。
你需要注意几个陷阱,看看你的代码不应该是一个问题,但要注意:
如果您需要代码示例,我相信有一些很好的c#示例(可能是vb)this one例如。