【C#,WPF】DataGrid選択行から非表示カラムの値を取得

WPFでデータグリッドの選択行にあるセル値を取得する際、DataGridColumnのGetCellContentを利用する方法があります。
ただし、この方法は取得したいセルが画面に表示されていない場合、値の取得に失敗してしまいます。
そこで、カラムが非表示でもセルの値を取得する方法を紹介します。

サンプルコード確認前の前提条件

今回、取得に使用するデータグリッドには「dgMaster」という名前を設定しています。
dgMasterには「no, name, secret」という順序で、3つのカラムを定義しています。
カラムの種別は3つとも「DataGridTextColumn」で、セルにはテキストが表示されます。
secretカラムのVisibilityはHiddenまたはCollapsedになっていて、画面に表示されない状態です。
noカラムとnameカラムは、画面に表示されている状態です。

DataGridColumnのGetCellContentを使った場合

対象カラムのGetCellContentを呼び、引数にデータグリッドの選択行(SelectedItem)を渡します。
セルがテキストの場合は戻り値がTextBlockになり、Textプロパティからセル値が取得できます。
以下が、サンプルコードです。

サンプルコード(DataGridColumn.GetCellContent)


この方法ですと、no列とname列の値は取得できますが、secret列の値は取得できません。
カラムのVisibilityがHiddenまたはCollapsedになっているとき、GetCellContentの戻り値にはnullが返ってきてしまいます。
(サンプル11行目のsecretCellTextはnullになり、secretCellText.Textの参照で例外が発生。)

非表示カラムの値を取得する方法

データグリッドのSelectedItemを直接展開する形で、セルの値を取得することができます。
この場合、データグリッドにバインドしているデータの型に合わせ、適切なキャストをする必要があります。
以下が、サンプルコードです。

サンプルコード(非表示カラムの値を取得)


サンプルのコメントにも書いていますが、データグリッドにバインドしたデータにより取得方法が変わります。
例として、データテーブル(DataTable)をバインドしたときと、文字列配列(string[][])をバインドしたときの方法を記載しています。
それぞれのデータに対応した型でキャストすることで、非表示にしているsecret列のセル値も取得できるようになります。

まとめ:非表示カラムの取得はDataGridのSelectedItemをキャストする

カラムがHiddenやCollapsedで非表示になっているとき、セルの値を取得する方法を解説しました。
テーブルに見えない隠しカラムを用意し、内部処理でのみ使いたいときなどにご活用ください。
ただし注意点として、データグリッドにバインドしたデータの型によって、値の取得方法を変えないといけないのが難点です。

Share

  • Twitter Shareボタン
  • Facebook Shareボタン
  • はてなブックマーク Shareボタン
  • LINE Shareボタン

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。