版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
问题:如何实现从下拉框单元格的值改变后,更改其它一列的值。
很简单的实现,使用DataGridView.CellValueChanged 事件即可,该事件会在单元格的值更改时发生。
具体代码如下:
Private Sub dgv_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellValueChanged
If dgv.Columns(e.ColumnIndex).Name = "ComboBox" Then
dgv(0, e.RowIndex).Value = dgv(e.ColumnIndex, e.RowIndex).Value
End If
End Sub
以上代码将在新增的“ComboBox”列的值发生改变后,将第1列对应行的单元格的值修改为和它相同。运行时如下:
然而,我们很快会发现有这样一个问题:当下拉框更改了值,但是第一行数据不会改变,直到下拉框所在单元格失去焦点,第一行的值才和下拉框单元格的值一致。在Msdn中有详细说明:DataGridView.CellValueChanged 事件发生时的用户指定的值是已提交,这通常发生在焦点离开该单元格时。
那么如果要实现在从下拉框选择后就立即更改另一列的值,那就得用上DataGridView.CurrentCellDirtyStateChanged 事件,当单元格被标记为已修改但尚未保存更改时发生。
修改后的代码如下:
Private Sub dgv_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles dgv.CurrentCellDirtyStateChanged
dgv(0, dgv.CurrentCell.RowIndex).Value = dgv.CurrentCell.EditedFormattedValue
End Sub
请删除之前的DataGridView.CellValueChanged 事件代码。
由于.net平台下C#和vb.Net很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看vb.net 教程 目录