Datagridview着色单元格

时间:2014-08-06 12:34:24

标签: vb.net winforms datagridview colors cell

我遇到了datagridview的问题。我试图创建一个允许我运行某些测试的程序。我想在datagridview中列出它们。然后使用计数器我希望程序通过活动服务器进程并运行它们。在概述中,我想通过着色我添加的单元来可视化进程是否处于活动状态。我以前做过这个并且使用了相同的代码,但这次它似乎没有用。您可以在此处找到表单load事件的代码。谁能告诉我我做错了什么?

 Private Sub frmServerProcesses_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim strSQL As String
    Dim oDR As SqlClient.SqlDataReader = Nothing

    'bij het opstarten moet de stopknop disabled zijn
    btnServerStop.Enabled = False
    btnServerStart.Enabled = True

    statServerProcesseslbl.Text = "Server ready"

    'opvragen van de processen
    strSQL = " SELECT * FROM SERVERPROCESSES"

    Dim connection As New SqlConnection(SQLConnectstring)
    Dim dataadapter As New SqlDataAdapter(strSQL, connection)
    Dim ds As New DataSet()
    connection.Open()
    dataadapter.Fill(ds, "SERVERPROCESSES")
    connection.Close()

    dgvServerProcesses.DataSource = ds
    dgvServerProcesses.DataMember = "SERVERPROCESSES"
    dgvServerProcesses.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
    dgvServerProcesses.Columns("LASTRUNDATE").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
    'lege row die normaal wordt toegevoegd verwijderen
    dgvServerProcesses.AllowUserToAddRows = False

    'extra kolom toevoegen voor kleuren van actief of niet
    dgvServerProcesses.Columns.Add("TEST", "TEST")

    For i As Integer = 1 To dgvServerProcesses.Rows.Count - 1
        If dgvServerProcesses.Rows(i).Cells(2).Value = "True" Then

            dgvServerProcesses.Rows(i).Cells(2).Style.BackColor = Color.Black
        End If
    Next

    'lege row die normaal wordt toegevoegd verwijderen
    dgvServerProcesses.AllowUserToAddRows = False

End Sub

我只是试图将两件事放在不同的潜艇中。因此,填充网格并标记活动网格现在是分开的。两个潜艇都由load潜水艇调用。但颜色仍然不起作用。但如果我用一个按钮调用checkprocess它确实有用。但也很奇怪的是,columncount是不同的。如果我用一个按钮调用它,他会在0的另一个案例中开始指望1。有人可以向我解释一下吗?我在这里显示了检查活动布尔值的新代码

Public Sub CheckProcessActive()
    For i As Integer = 0 To dgvServerProcesses.Rows.Count - 1
        If dgvServerProcesses.Rows(i).Cells(2).Value = "True" Then
            dgvServerProcesses.Rows(i).Cells("ACTIVE").Style.BackColor = Color.Green
        Else
            dgvServerProcesses.Rows(i).Cells("ACTIVE").Style.BackColor = Color.Red
        End If
    Next
End Sub

1 个答案:

答案 0 :(得分:0)

您注意到的行为是正常。即使您设置DataSource属性,DatagridView也不会创建列并在显示网格之前填充,但在设置此属性后不会立即填充。

您可以使用DataGridView.DataBindingComplete事件确保在更改样式时填充网格,并在此处调用CheckProcessActive()