我在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属性工作正常,所以我知道事件正在触发。
答案 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的不必要的调用 - 每次更新单元格时都会触发单元格格式化。一旦你全部启动并运行,这只是一个用户离开一个单元格。