Vb.net 如何从虚拟未绑定DataGridView';编辑控件事件处理程序?

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)将当前单元格的内容提交到数据缓存 该示例使用行级提交,即将值推入行缓冲区,直到保留当前行。只有这样,行才会添加到(或更新到)数据存储中。我也是这

使用来自的演练[[http://msdn.microsoft.com/de-de/library/15a31akc.aspx]],我在虚拟模式下实现了一个
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未绑定,虚拟”)。