ASP.NETの小技!―データベースバインディングを条件付きで

ASP.NETのコントロールには、データベースバインディングという便利な機能がある。特定のコントロールについて、データソースの特定のフィールドから自動で値を取り出し割り当てる機能だ。これを利用すると、データベースから取り出したデータをそのまま表示でき便利なのだが、データベースから取り出したデータの内容に応じてちょっと表示を変えたい、というときの方法が今ひとつわからなかった。

たとえば、データベースのフィールドにNULLを置いたままにしておいた場合、そのままだと空白が表示されるままである。NULLの場合に適当なテキストを表示したり、NULLの場合には別のURLにナビゲートしたいなど、こういうことはあると思うのだ。MSDNのヘルプを見てもあまり有用な情報はなかったので、いろいろ試してみることにした。

最初に考えるのが、Evalメソッドの返り値を見て、2つの値を使い分ける三項演算子だが、Evalメソッドの返り値が問題であった。単純に考えれば文字列を返すはずだから空文字列で比較すればいいんじゃないか?とか思うはずだ、で、つぎのようなコーディングを試みてみる。ちなみに、この時点でデータバインディング式で条件式が使えるかなどは、まったくわかっていない。文字列加算演算子が使えるからもしかして使えるかも、というノリだ。

結果的には、演算式は使えるのだが、条件式が問題であった。空文字列で比較しても無駄であった。たとえば、以下のような式である。

(Eval("Field")=="")? "空だったら出す文字列":Eval("Field")

これはうまくいかない。Eval("Field")はObject型を返すので、文字列と比較してもしようがない。しかも、このObject型はデータベース関係なので、DBNull型と比較すればいいんじゃないかと思ったら、これはVBしか使えないのであった(ちなみに私はC#を使っているのだ)。で、よく調べたらDBNull型はクラスなので、その唯一のプロパティであるValueと比較すればいいことがわかってきた。そこで、以下のように式を書けばいいことがわかった。

(Eval("Field")==System.DBNull.Value)? "空だったら出す文字列":Eval("Field")

これで万事OKだ。データベースのフィールドがNULLの場合に書き出す文字列など指定することが可能になった。そのうち、成果は公開できるだろう。

コメント