VB.NET Bound Datagridview - 动态更改字体?

时间:2017-04-24 19:37:51

标签: vb.net datagridview

简介

我有一个datagridview,通过在我的代码中尽早为其分配数据表来填充其数据。数据显示没问题。然后我尝试将后面的颜色和字体应用于仅某些单元格,所以不是全部。

我尝试了什么

现在,通过做一些研究,这似乎是通过每个单元格的styles属性来完成的。我已经构建了一个循环:

Dim strikethrough_style As New DataGridViewCellStyle

    strikethrough_style.Font = strikethrough_font
    strikethrough_style.BackColor = Color.Red

For row = 0 To DataGridView1.Rows.Count - 1
            For col = 0 To DataGridView1.Columns.Count - 1
                DataGridView1.Rows(row).Cells(col).Style = strikethrough_style
            Next
Next

这应该会改变我的单元格的所有,使其具有红色背景并具有删除线字体,但运行时没有任何单元格发生变化。

我可以像这样更改defaultcellstyle属性:

DataGridView1.DefaultCellStyle = strikethrough_style

适用于所有细胞,

但就像我上面所说,我想最终只改变某些行,而不是所有行。有什么东西压倒我的风格吗?如果是这样,我该如何解决这个问题?

更新

如果我尝试的话,这很奇怪:

DataGridView1.Columns(4).DefaultCellStyle = strikethrough_style

列确实应用了样式;但是,当我尝试:

DataGridView1.Rows(1).DefaultCellStyle = strikethrough_style

行没有。似乎奇怪的是我可以将样式应用于列而不是行。

2 个答案:

答案 0 :(得分:1)

所以我在尝试了许多事情之后找到了答案并希望分享,所以没有人犯同样的错误。最初我绑定了datagridview后,我的样式代码就出现了:

DataGridView1.DataSource = sql_server.execute_sql(sql_server_location, commands)

    Dim strikethrough_style As New DataGridViewCellStyle
    strikethrough_style.Font = New Font(DataGridView1.Font.Name, DataGridView1.Font.Size, FontStyle.Strikeout)

    For Each row As DataGridViewRow In DataGridView1.Rows
        If row.Cells(1).Value = True Then
            row.DefaultCellStyle = strikethrough_style
        End If
    Next

问题在于,数据网格视图花费的时间太长,无法完成对数据的绑定。

更好的方法是在数据通过绑定完成事件绑定后进行样式

Private Sub dataGridView1_DataBindingComplete(ByVal sender As Object, ByVal e As DataGridViewBindingCompleteEventArgs) Handles DataGridView1.DataBindingComplete

    Dim strikethrough_style As New DataGridViewCellStyle
    strikethrough_style.Font = New Font(DataGridView1.Font.Name, DataGridView1.Font.Size, FontStyle.Strikeout)

    For Each row As DataGridViewRow In DataGridView1.Rows
        If row.Cells(1).Value = True Then
            row.DefaultCellStyle = strikethrough_style
        End If
    Next

End Sub

答案 1 :(得分:0)

    Dim strikethrough_style As New DataGridViewCellStyle

    strikethrough_style.Font = New Font("Times New Roman", 16, FontStyle.Bold)
    strikethrough_style.BackColor = Color.Red

    For Each row As DataGridViewRow In Datagridview1.Rows
        For i = 0 To Datagridview1.Columns.Count - 1
            row.Cells(i).Style = strikethrough_style
        Next
    Next

它应该有用。