2

我正在尝试根据我(编辑RadContextMenu:)中当前选择的行来更改我的项目。如果当前行中的数据绑定项目具有正确的属性值,我希望启用该项目。RadGridViewOrderList

问题是当我直接右键单击一行打开尚未更新的行时,因此RadContextmenu调用旧行。如果我左键单击或双击右键,它可以正常工作。CurrentRowDropDownOpened

这是一些代码:

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;
}
4

2 回答 2

0

使用dataGridView.EndEdit();此函数提交和结束对当前正在编辑的单元格的编辑操作。

更多信息在这里

于 2015-09-18T11:56:23.833 回答
0

很抱歉没有指定我使用的是 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;
    }

现在它按预期工作。感谢您花时间帮助我:-)

于 2015-09-18T13:36:33.467 回答