我正在使用DevExpress XPF GridControl
的NewItemRow
将数据插入数据库。
当我在最后一个单元格中按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);
}
谢谢您的帮助。