RadContextMenu.在RadGridView之前调用dropdownnoopened.CurrentRow改变
本文关键字:dropdownnoopened CurrentRow 改变 调用 RadGridView RadContextMenu | 更新日期: 2023-09-27 18:13:14
我正试图根据我的RadGridView
(编辑:OrderList
)中当前选择的行更改我的RadContextMenu
上的项目。如果当前行中的绑定项具有正确的属性值,我希望启用该项。
问题是,当我直接右键单击一行打开RadContextmenu
时,CurrentRow
尚未更新,因此DropDownOpened
被旧行调用。如果我点击左键或者双击右键,它可以正常工作。
下面是一小段代码:
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;
}
Use 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;
}
现在它按预期工作了。谢谢你花时间帮助我:-)