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

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

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

前提

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

GetCellContentを使った場合

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

サンプルコード(GetCellContent)

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

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

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

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

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

まとめ

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


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です