DataGridView仅在单击单击时刷新样式

时间:2013-01-29 23:00:21

标签: vb.net datagridview formatting cell

我在VB.NET和VS2012中有一个DGV。我试图动态更改各种单元格的单元格格式。以下是我的代码:

Private Sub gridFinancial_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles gridFinancial.CellFormatting
    Try
        For Each row As chgltrDataSet.gridsourceRow In frmFinBatchChrg.ChgltrDataSet.gridsource.Rows
            If gridFinancial.CurrentRow.Cells("CompBool").Value = True Then
                Me.gridFinancial.CurrentRow.Cells(0).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(1).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(2).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(3).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(4).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(5).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(6).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(7).Style.BackColor = Color.Yellow
                Me.gridFinancial.CurrentRow.Cells(8).Style.BackColor = Color.Yellow

                Me.gridFinancial.CurrentRow.Cells(0).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(1).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(2).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(3).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(4).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(5).ReadOnly = True
                Me.gridFinancial.CurrentRow.Cells(6).ReadOnly = True
                Me.gridFinancial.Update()
                Me.gridFinancial.Refresh()
    End if

    Catch ex As Exception

    End Try


End Sub

我已经读过这个:http://msdn.microsoft.com/en-us/library/1yef90x0.aspx也许我错过了一些东西,但是现在,应用了这个代码,我的DataGridView只会在DataGridView被点击之后点击其中一个受影响的单元格时才会反映该代码绘。换句话说,在加载DataGridView之后,单击它们之后单元格将只是黄色(然后该行中的所有单元格应为黄色,显示为黄色)。为什么是这样?我不确定我做错了什么。

作为一个附带问题,这个单元格格式化事件在我的DGV被绘制之前至少会触发40-50次,并且它只是一个6行的DataSource。这不是一个更好的事件触发器吗?我确信我的代码可能会更好,但这看起来非常低效。

上面代码中的readonly属性工作正常,所以我知道事件正在触发。

1 个答案:

答案 0 :(得分:1)

您可以通过DataGridViewCellFormattingEventArgs

访问该样式,而不是像您一样设置单元格样式

这样的事情:

e.CellStyle.BackColor = Color.Yellow

要考虑的另一件事是,在CellFormatting事件中附加DataBindingComplete处理程序通常会更好。

Private Sub DataGridView1_DataBindingComplete(sender As System.Object, e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DataGridView1.DataBindingComplete
    AddHandler DataGridView1.CellFormatting, AddressOf Me.DataGridView1_CellFormatting
End Sub

这解决了DataGridView的可视部分呈现时的一些奇怪行为,确保在后续事件附加之前完成所有操作。


这个带有DataBindingComplete事件的提示应该至少减少对CellFormatting的不必要的调用 - 每次更新单元格时都会触发单元格格式化。一旦你全部启动并运行,这只是一个用户离开一个单元格。