【问题标题】:DataGridView properties not being set when called from Form Load从表单加载调用时未设置 DataGridView 属性
【发布时间】:2015-03-24 10:57:54
【问题描述】:

我在 VS2008 / .NET 3.5 winforms 项目中的 DataGridView 控件遇到了一个非常奇怪的问题。我有一个带有网格的简单表格。在表单构造函数中,我调用一个函数将研磨绑定到 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

【问题讨论】:

  • 我们可以看看一些代码吗?此外,设置背景颜色应该使用像 cell_formatting 这样的专用方法来完成
  • 如果 resultCell.Value.ToString().ToUpper = "A".ToUpper 或 resultCell.Value.ToString().ToUpper = "B".ToUpper 然后 ColorCell.Style.BackColor = Color.FromName ("Red") ElseIf resultCell.Value.ToString().ToUpper = "C".ToUpper 或 resultCell.Value.ToString().ToUpper = "D".ToUpper Then ColorCell.Style.BackColor = Color.FromName("MediumSeaGreen ") Else ColorCell.Style.BackColor = Color.FromName("Yellow") End If
  • 表单中的这段代码是否加载?
  • 我有 fillgrid 函数,它在页面加载和用数据读取器填充网格后调用。我在 for 循环中使用此代码
  • 所以那里有一些我们不知道它们来自哪里的变量,例如ColorCell,resultCell。那些人是怎么进来的?我们可以有完整的例程吗?

标签: vb.net winforms datagridview


【解决方案1】:

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

您必须注意几个问题,查看您的代码应该不是问题,但要注意:

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

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

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多