1

我在 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 行数据源。没有更好的事件触发器吗?我确信我的代码可能会更好,但这似乎效率很低。

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

4

1 回答 1

1

无需像您一样设置单元格样式,您可以通过DataGridViewCellFormattingEventArgs.

所以是这样的:

e.CellStyle.BackColor = Color.Yellow

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

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 的不必要调用 - 每次更新单元格时都会触发单元格格式化。一旦你全部启动并运行,这只是用户离开单元格的一次。

于 2013-01-29T23:26:04.970 回答