Vb.net 如何从虚拟未绑定DataGridView';编辑控件事件处理程序?
使用来自的演练[[http://msdn.microsoft.com/de-de/library/15a31akc.aspx]],我在虚拟模式下实现了一个Vb.net 如何从虚拟未绑定DataGridView';编辑控件事件处理程序?,vb.net,winforms,datagridview,Vb.net,Winforms,Datagridview,使用来自的演练[[http://msdn.microsoft.com/de-de/library/15a31akc.aspx]],我在虚拟模式下实现了一个DatagridView,完全没有绑定,在vb10express中(我们说的是WinForms) 我知道committedit(DataGridViewDataErrorContexts.Commit)将当前单元格的内容提交到数据缓存 该示例使用行级提交,即将值推入行缓冲区,直到保留当前行。只有这样,行才会添加到(或更新到)数据存储中。我也是这
DatagridView
,完全没有绑定,在vb10express中(我们说的是WinForms)
我知道committedit(DataGridViewDataErrorContexts.Commit)
将当前单元格的内容提交到数据缓存
该示例使用行级提交,即将值推入行缓冲区,直到保留当前行。只有这样,行才会添加到(或更新到)数据存储中。我也是这么做的
问题--如何以编程方式提交当前行而不离开它?(我想提交整行,而不仅仅是当前单元格。)
如果用户离开该行,则会有一个RowValidating
,RowValidated
,RowEnter
事件序列,其中会处理数据存储更新。例如,一个想法(目前我唯一的想法)是简单地将CurrentCell
重新设置为Nothing
但是我不能仅仅将DataGridView
的CurrentCell
属性设置为Nothing
(或当前行之外的任何单元格),因为我想从自定义列创建的自定义编辑控件的事件处理程序中提交,当在那里设置CurrentCell
时,我看到一个System.invalidoOperationException
异常
实际上,它是组合框右侧的一个小按钮,即我创建了一个DataGridViewComboBoxCell
子体,它是一个DataGridViewComboxColumn
子体的编辑控件。我的特殊组合框单元格添加了一个小按钮,它应该提交当前行。不幸的是,该按钮的\u Click
事件处理程序无法更改CurrentCell
,因为DetachEditingControl
会引发异常
显然,我必须延迟CurrentCell
重新分配,直到整个\u Click
事件处理完毕。还是怎样我该怎么做?向我注册一条自定义的Windows消息,SendMessage
,然后重写窗体的Windows过程,以便在收到此消息时重新设置CurrentCell
?(喂?)
应该有一种相当简单的方法,通过触发我处理的事件来执行数据存储更新,让DataGridView
提交所有更改,否?
我希望我所说的有点清楚。我还没有紧凑的代码示例:(这里是提交当前行的可靠方法:
' Optional: mark the current cell as dirty so the current row definetely will be
' commited:
MyDataGridView.NotifyCurrentCellDirty(True)
' Aktuelle Row commiten. Einen besseren Weg als "Keine Zelle selektieren, dann Originalzelle wieder selektieren" kenne ich nicht:
Dim OrigCellAddress As Point = New Point(MyDataGridView.CurrentCellAddress.X, MyDataGridView.CurrentCellAddress.Y)
MyDataGridView.CurrentCell = Nothing
MyDataGridView.CurrentCell = MyDataGridView.Rows(OrigCellAddress.Y).Cells(OrigCellAddress.X)
异常的问题是我在RowEnter事件处理程序中执行的BeginEdit/EndEdit序列:(这导致了对不可重入内容的间接递归调用。Ah,附录:我不设置数据源,只设置DataGridView中的行数(如果不是“我的DataGridView未绑定,虚拟”)。