简介
我有一个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
行没有。似乎奇怪的是我可以将样式应用于列而不是行。
答案 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
它应该有用。