- 2012-03-25 (日) 1:26
- WPF
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のスクロール制御
- [WPF] DataGrid ヘッダー背景色の設定
- [WPF] DataTemplateの中のコントロール取得
- [C#] 文字列をbyte配列に変換
- [Android] FTPクライアントの実装
- Newer: [WPF] DataGrid ヘッダー背景色の設定
- Older: [Android] マーケット公開手順
Comments:0
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 ミライニトドケ