RadContextMenu.DropDownOpened 在 RadGridView.CurrentRow 更改之前调用
RadContextMenu.DropDownOpened called before RadGridView.CurrentRow is changed
我正在尝试根据 RadGridView
中当前选定的行更改 RadContextMenu
中的项目(编辑:OrderList
)。如果当前行中的数据绑定项目具有正确的 属性 值,我希望启用该项目。
问题是当我直接右击某一行打开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;
}
使用dataGridView.EndEdit();
此函数提交并结束对当前正在编辑的单元格的编辑操作。
更多信息here
抱歉没有说明我使用的是 radgridview。
我找到了 related answer 帮助我解决了我的问题。
我最终对 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;
}
现在它按预期工作了。感谢您花时间帮助我:-)
我正在尝试根据 RadGridView
中当前选定的行更改 RadContextMenu
中的项目(编辑:OrderList
)。如果当前行中的数据绑定项目具有正确的 属性 值,我希望启用该项目。
问题是当我直接右击某一行打开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;
}
使用dataGridView.EndEdit();
此函数提交并结束对当前正在编辑的单元格的编辑操作。
更多信息here
抱歉没有说明我使用的是 radgridview。
我找到了 related answer 帮助我解决了我的问题。 我最终对 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;
}
现在它按预期工作了。感谢您花时间帮助我:-)