Vb.net DevXPress GridView焦点在右键单击时不更新
我有一个DevExpress datagridview,其中列出了员工必须完成的一些工作。实际上,右键单击作业行,然后选择用于启动程序不同部分的菜单项。填充到程序下一部分的信息来自FocusedRowHandleVb.net DevXPress GridView焦点在右键单击时不更新,vb.net,gridview,devexpress,right-click,Vb.net,Gridview,Devexpress,Right Click,我有一个DevExpress datagridview,其中列出了员工必须完成的一些工作。实际上,右键单击作业行,然后选择用于启动程序不同部分的菜单项。填充到程序下一部分的信息来自FocusedRowHandle Dim someString as String = gvMyGV.GetRowCellValue(gvMyGV.FocusedRowHandle, "ColumnHeader") 现在,如果员工左键单击该行以选中该行,然后右键单击->菜单项以启动下一步,则一切正常。但是,如果他们右
Dim someString as String = gvMyGV.GetRowCellValue(gvMyGV.FocusedRowHandle, "ColumnHeader")
现在,如果员工左键单击该行以选中该行,然后右键单击->菜单项以启动下一步,则一切正常。但是,如果他们右键单击尚未高亮显示的任何其他行,则FocusRowHandle在启动下一阶段之前不会更新到新单击的行,从而导致它加载在他们执行右键单击之前选择的作业的信息
“DevEx选定行”高亮显示会以可视方式更新该行,该行变为黄色,但FocusedRowHandle值会一直保持到上下文菜单关闭后
我需要在右键单击时更新行句柄,然后再加载ContextMenu
找到的解决方案:
Private Sub gvMyGV_MouseDown(sender As Object, e As MouseEventArgs) Handles gvMyGV.MouseDown
If e.Button = MouseButtons.Right Then
Dim hitInfo As GridHitInfo = gvMyGV.CalcHitInfo(New Point(e.X, e.Y))
gvStatus.FocusedRowHandle = hitInfo.RowHandle
End If
End Sub
这就是他们一直以来的方式。下面是我从一个应用程序中提取的一些代码,我需要修复它,但它使用的是DevExpress 8,但应该是相同的
Private Sub GridView2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles GridView2.MouseDown
If e.Button = MouseButtons.Right Then
Dim view As GridView = CType(sender, GridView)
If view Is Nothing Then Return
' obtaining hit info
Dim hitInfo As GridHitInfo = view.CalcHitInfo(New Point(e.X, e.Y))
' switching focus
view.FocusedRowHandle = hitInfo.RowHandle
End If
End Sub
这并不是你唯一的控制。LClick设置活动/聚焦项目,而RClick不设置。您必须在RCLick或MouseDown事件中说明这一点,但在上下文菜单关闭后会这样做。与中一样,我可以右键单击一行以打开关联菜单,然后左键单击GridControl的空白区域,选择将正确更新。在CM关闭后,2-3个其他事件和数不清的代码行已经开始运行。仅单击不会激活控件。即使在列表框上打开一个空的CM也不会改变焦点或选择该项目。我认为我的第一条评论给人的感觉是有争议的,这不是我的本意。你知道其他几个事件是什么吗,这样我就可以尝试捕捉它们并提取我需要的数据了?因为它在关闭后会更新,所以我假设数据就在那里的某个地方。在mousedown事件中,获取鼠标XY,转换为项目/行引用以在菜单打开之前获取相关信息。常规DGV对此有测试相关方法;你的也可以。一般来说,如果菜单需要使用控件中的一些动态信息(如DGV.RowYep),则在CM打开事件中执行类似操作为时已晚。请在发布之前解决此问题。感谢你的回答。