我尝试以编程方式更改绑定的DataGridView的单元格内容时遇到问题。
我实现了一小段代码来显示问题。
执行以下步骤来复制问题:
这是代码:
Public Class Form1
Private _dgv As New DataGridView
Private _Movies As New System.ComponentModel.BindingList(Of Movie)
Public Sub New()
InitializeComponent()
Me.Controls.Add(_dgv)
_dgv.Dock = DockStyle.Fill
_dgv.DataSource = _Movies
AddHandler _dgv.KeyDown, AddressOf DataGridView_KeyDown
End Sub
Private Sub DataGridView_KeyDown(sender As Object, e As KeyEventArgs)
If e.Control AndAlso e.KeyCode = Keys.V Then
_dgv.CurrentCell.Value = Clipboard.GetText
End If
End Sub
Public Class Movie
Public Property Title As String
End Class
End Class
我的实施确实存在问题,但我花了很多时间搜索解决方法但没有成功。提前感谢您提供给我的任何帮助。
答案 0 :(得分:0)
在构造函数中设置表单时,请确保DataGridView的EditMode是DataGridViewEditMode.EditOnEnter。这使得我们粘贴的单元格在接收到焦点时立即进入编辑模式,并且如果我们离开它,则使新行粘贴而不是取消。
Public Sub New()
InitializeComponent()
Me.Controls.Add(_dgv)
_dgv.Dock = DockStyle.Fill
_dgv.DataSource = _Movies
AddHandler _dgv.KeyDown, AddressOf DataGridView_KeyDown
_dgv.EditMode = DataGridViewEditMode.EditOnEnter
End Sub
然后,不是设置单元格值,而是设置基础Movie的Title属性:
Private Sub DataGridView_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
If e.Control AndAlso e.KeyCode = Keys.V Then
Dim Mov As Movie = _Movies.Last
Mov.Title = Clipboard.GetText
_dgv.Refresh()
End If
End Sub
在DataGridView中添加新行时,BindingList会自动将新的Movie对象添加到列表中。 _Movies.Last应该为您提供新添加的电影。
答案 1 :(得分:0)
为什么不使用DataGridView事件UserAddedRow?