Home > WPF > [WPF] DataGrid 指定セルにフォーカス移動

[WPF] DataGrid 指定セルにフォーカス移動

DataGridで任意のセルにフォーカスを移動する方法が分からずに悩んだので、簡単にまとめてみました。
 

まず、他のコントロールにフォーカスがあることも考慮してFocus()でDataGrid自体にフォーカスを移します。次にSelectedIndexプロパティに対象セルのある行のインデックス(0から始まる値)を設定して行を選択状態にします。
 

最後にCurrentCellプロパティに移動先セルの情報を設定するのですが、このプロパティにはDataGridCellではなくDataGridCellInfoオブジェクトを渡さなければなりません。設定値は次のようにして生成します。

DataGridCellInfo cellInfo = new DataGridCellInfo(dataGrid.Items[row], dataGrid.Columns[column]);

 

上記3ステップを踏むことで任意のセルにフォーカスを移動することが可能となります。
以下はフォーカス移動用に作った関数です。このままソースを張り付ければ、どのようなプログラムでも利用できるかと思います。

    public void DataGridSelectCell(DataGrid dgTgt, int row, int column, bool isBeginEdit = false)
    {
        //==== 指定行/列が存在するかチェック ====//
        if ((row < 0) || (dgTgt.Items.Count <= row) || (column < 0) || (dgTgt.Columns.Count <= column))
        {
            //-==- 存在しない -==-//
            return;
        }


        //==== 指定セルを選択状態にする ====//
        DataGridCellInfo cellInfo = new DataGridCellInfo(dgTgt.Items[row], dgTgt.Columns[column]);
        dgTgt.Focus();
        dgTgt.SelectedIndex = row;
        dgTgt.CurrentCell = cellInfo;


        //==== 編集モードに移行 ====//
        if (isBeginEdit)
        {
            dgTgt.BeginEdit();
        }
    }

 

補足ですが、上記関数ではisBeginEditという引数を取るようにしています。フォーカス移動後にそのまま編集できる状態にしたいというケースもありますので、そのためのオマケ機能です。
 

関連があると思われる記事:

このエントリーをはてなブックマークに追加
はてなブックマーク - [WPF] DataGrid 指定セルにフォーカス移動
Facebook にシェア
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]
[`tweetmeme` not found]
[`grow` not found]

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://gacken.com/wp/program/wpf/570/trackback/
Listed below are links to weblogs that reference
[WPF] DataGrid 指定セルにフォーカス移動 from ミライニトドケ

Home > WPF > [WPF] DataGrid 指定セルにフォーカス移動

Search
Feeds
Meta
人気の記事

Return to page top