ホーム > .NET, ASP.NET 備忘録 > データの値によってGridViewに表示されるコントロールを変更する

データの値によってGridViewに表示されるコントロールを変更する

bit値を持つデータ項目の値がtrueだった場合、GridViewにテキストを表示したい、という質問がありました。これに対して、私が実装した方法をまとめます。
用意したデータは本当にシンプルに以下のような形をしています(w

01

このテーブルをWebページにドラッグ アンド ドロップするとGridViewとSqlDataSourceが作成されます。このGridViewで編集を有効にします。

02

GridViewのスマートタグから列の編集を選択し、bitDataフィールドをTemplateFieldに変換します。

03

GridViewのスマートタグからテンプレートの編集を選択し、ItemTemplateにLabelを貼り付けます。

04

LabelのスマートタグからDataBindingsの編集を選択します。ここでVisibleプロパティにbitDataフィールドをバインドします。

05

ここまでできたら一度デバッグ実行をしてみましょう。チェックされているデータの横にLabelが表示されます。

06

データの編集時にはLabelは表示されません。また、ここでデータをチェックをはずすとLabelが表示されなくなります。

07

bitDataの値をVisibleプロパティにバインドすることでコントロールの表示/非表示を制御できることがわかりました。ではLabelが表示されているとき、CheckBoxが表示されないようにするにはどうしたらよいでしょうか。
テンプレートの編集画面でCheckBoxのスマートタグからDataBindingsの編集を選択します。ここでVisibleプロパティにbitDataフィールドをバインドします。これではLabelと同じ表示/非表示の動きをしてしまうので、カスタムバインドを選択し、コード式を以下のようにします。

!(bool)Eval("bitData")

ここでは Eval("bitData") がobject型でデータを返すので、それをbool型にキャストし、反転させています。

08

デバッグを実行すると、Labelが表示されている場合にはCheckBoxは非表示になっていることが確かめられます。

09

この場合のようにbit値の反転といったちょっとしたプログラムならコード式に含めてもいいでしょうが、もうちょっとデータに対して複雑な条件判定を行いたいような場合はどうしたらよいでしょうか。
実はカスタムバインド時にはPublicなメソッドを呼び出すことも可能です。Webページのコードに以下の記述を行います。

    public bool ReverseBit(object bflg)
    {
        return !(bool)bflg;
    }

そしてCheckBoxのデータバインディングを以下のように変更してみましょう。

10

この場合も同じように動作することが確認できます。
このテクニックはデータの形式を変更してGridViewに表示するといった場合にも使えるので覚えておくといいですね。

カテゴリー:.NET, ASP.NET 備忘録
  1. あん
    2014年9月24日 11:52 AM

    大変勉強になりました。
    データフィールドが文字型の時はどのようなcheckboxになるか知りたいです。自分でやってみましたが型が違うと怒られました。

  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。