- 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 ミライニトドケ