1

データベースにデータを挿入するためにGridControlDevExpress XPF を使用しています。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;
        }
      }
    }
  }
}
4

2 に答える 2

3

私が抱えていた問題は、データバインドされた ObservableCollection を更新した結果、グリッドが更新され、別の行が選択されたためであることが判明しました。DJKRAZE によって投稿された 2 番目のコードは機能しましたが、データベースへの呼び出しは非同期であるため、RowUpdated イベントが終了する前に発生しませんでした。これを解決するために、データが更新された後に NewItemRow を選択するように OnDataChanged メソッドを上書きしました。

動作した結果のコードは次のとおりです。

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

助けてくれてありがとう。

于 2013-01-03T23:39:35.733 に答える
2

グリッド ビューの FoucusedRow プロパティを、RowEventArgs から取得した新しい行オブジェクト インスタンスに設定するだけです。

private void MVVMFriendlyDxgTableView_RowUpdated(object sender, DevExpress.Xpf.Grid.RowEventArgs e) 
{
    if (e.RowHandle == GridControl.NewItemRowHandle)
    {
        Dispatcher.BeginInvoke(new Action(() => { viewSource.View.MoveCurrentToLast(); }));
        Dispatcher.BeginInvoke(new Action(() => { gridView.FocusedRow = e.Row; }));
        e.Handled = true;
    }
}

ちらつきが発生した場合は、これを試すことができます

   if (e.RowHandle == GridControl.NewItemRowHandle)
    Dispatcher.BeginInvoke(new Action(() =>
    {
        MVVMFriendlyDxgTableView.FocusedRowHandle = GridControl.NewItemRowHandle;
    }), null);

並べ替えと ObservableCollection を行うには、この例を見てください コレクションの並べ替え / ObservableCollection

于 2013-01-03T22:37:28.047 に答える