从表单加载调用时未设置 DataGridView 属性

DataGridView properties not being set when called from Form Load

我在 VS2008/.NET 3.5 winforms 项目中遇到了一个非常奇怪的 DataGridView 控件问题。我有一个带有网格的简单表格。在表单构造函数中,我调用了一个函数来将 grind 绑定到 DataTable,然后遍历行,将最后一个单元格的背景颜色设置为 LightGrey,如果列值为 true,则单元格本身设置为只读。表单加载完成后,代码不起作用,即单元格未设置为 LightGrey 并且不是只读的(即使当我单步执行代码时我可以看到正在设置的属性)。然后我再次从按钮调用该函数,但这次颜色更改为 LightGrey,单元格变为只读,即代码有效。

代码:

 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

感谢您添加代码。我建议将所有格式设置放入 DataGridView 的 CellFormatting 事件中。

您必须注意一些陷阱,查看您的代码应该不是问题,但要注意:

  1. 这针对网格中的每个单元格运行。因此,数据库查找是一个 真的 坏主意。
  2. 您最好尽可能从方法的 eventargs 参数中获取值

如果您需要代码示例,我相信有一些很好的 c# 示例(可能 vb 到)this one 例如。