我正在使用DevExpress XPF GridControlNewItemRow将数据插入数据库。

当我在最后一个单元格中按Enter键时,它将输入数据并返回到网格的第一行。

我想做的是返回到NewItemRow,以便用户可以开始插入新记录,而无需重新选择NewItemRow行。

从NewItemRow插入行后,如何将焦点设置为NewItemRow?

ps:我在这里问的不是DevExpress论坛,因为这里得到的响应要快得多:)

编辑:

这是我尝试过的一些代码,但结果完全相同:

void MVVMFriendlyDxgTableView_RowUpdated(object sender, DevExpress.Xpf.Grid.RowEventArgs e)
{
  if (RowUpdatedCommand != null)
  {
    if (e.Row != null)
    {
      if (RowUpdatedCommand.CanExecute(e.Row))
      {
        RowUpdatedCommand.Execute(e.Row);
        if (e.RowHandle == GridControl.NewItemRowHandle)
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                SelectRow(GridControl.NewItemRowHandle);
            }));
            e.Handled = true;
        }
      }
    }
  }
}

最佳答案

原来,我遇到的问题是由于更新了数据绑定的ObservableCollection,导致刷新了网格并选择了另一行。 DJKRAZE发布的第二个代码本来可以工作,但是我对数据库的调用是Async,因此在RowUpdated事件完成之前没有发生。为了解决这个问题,我重写了OnDataChanged方法以在数据更新后选择NewItemRow。

这是有效的结果代码。

protected override void OnDataChanged(bool rebuildVisibleColumns)
{
    base.OnDataChanged(rebuildVisibleColumns);
    Dispatcher.BeginInvoke(new Action(() =>
    {
        this.FocusedRowHandle = GridControl.NewItemRowHandle;
    }), null);
}


谢谢您的帮助。

10-04 14:20