C# 更改RadGridView.CurrentRow之前调用RadContextMenu.DropDownOpen
我正试图根据我的C# 更改RadGridView.CurrentRow之前调用RadContextMenu.DropDownOpen,c#,winforms,gridview,contextmenu,dropdown,C#,Winforms,Gridview,Contextmenu,Dropdown,我正试图根据我的RadGridView(编辑:OrderList)中当前选定的行,更改我的RadContextMenu上的项目。如果当前行中的数据绑定项具有正确的属性值,我希望启用该项 问题是,当我直接右键单击一行打开RadContextmenu时,CurrentRow尚未更新,因此使用旧行调用dropdownOpen。 如果我用鼠标左键或右键双击,效果很好 下面是一些代码: OrderMenu.DropDownOpened += OrderMenu_DropDownOpened; 方法呢 p
RadGridView
(编辑:OrderList
)中当前选定的行,更改我的RadContextMenu
上的项目。如果当前行中的数据绑定项具有正确的属性值,我希望启用该项
问题是,当我直接右键单击一行打开RadContextmenu
时,CurrentRow
尚未更新,因此使用旧行调用dropdownOpen
。
如果我用鼠标左键或右键双击,效果很好
下面是一些代码:
OrderMenu.DropDownOpened += OrderMenu_DropDownOpened;
方法呢
private void OrderMenu_DropDownOpened(object sender, EventArgs e)
{
GoToParentOrderBtn.Enabled = GetSelectedOrder()?.ParentOrderId != null;
}
private OrderViewModel GetSelectedOrder()
{
return (OrderViewModel)OrderList.CurrentRow.DataBoundItem;
}
使用
dataGridView.EndEdit()代码>此函数提交并结束当前正在编辑的单元格上的编辑操作
更多信息很抱歉没有指定我使用的是radgridview
我找到了一个帮助我解决问题的方法。
最后,我对RadGridView进行了扩展(这样我就可以在应用程序中使用它),在mousedown上触发一个事件:
public partial class RadExtendedGridViewController : RadGridView
{
public RadExtendedGridViewController()
{
InitializeComponent();
base.MouseDown += RadExtendedGridViewController_MouseDown;
}
private void RadExtendedGridViewController_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
var element = this.ElementTree.GetElementAtPoint(e.Location);
GridDataCellElement cell = element as GridDataCellElement;
if (cell?.RowElement is GridDataRowElement)
{
Rows[cell.RowIndex].IsSelected = true;
}
}
}
}
然后,我将GetSelectedOrder更改为使用SelectedRows而不是Current:
private OrderViewModel GetSelectedOrder()
{
return (OrderViewModel)OrderList.SelectedRows.FirstOrDefault()?.DataBoundItem;
}
现在它按预期工作。感谢您花时间来帮助我:-)我为您的问题提供了答案:)很抱歉,我应该指定我的gridview。我使用的是RadGridView