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

时间:2015-03-24 10:57:55

标签: vb.net winforms datagridview

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

1 个答案:

答案 0 :(得分:1)

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

你需要注意几个陷阱,看看你的代码不应该是一个问题,但要注意:

  1. 这将针对网格中的每个单元格运行。因此,数据库查找是一个真的坏主意。
  2. 您最好尽可能从方法的eventargs参数中获取值
  3. 如果您需要代码示例,我相信有一些很好的c#示例(可能是vb)this one例如。