アーカイブ

Archive for 2013年1月

最新の GridView なら、、、の裏側

2013年1月24日 コメントを残す

間があいてしまいましたが。
前回の記事でほのめかしておいた、ItemType プロパティを設定したときになにが起きてるのか、というあたりをちょっとのぞいてみましょう。

まず、GridView の AutoGenerateCollumns プロパティを false にして、BoundField コントロールとして ID、Name、Mail の各項目を追加します。

image

こんな感じになります。
で、実行して動作を確認すると、、、

image

こんな動きをします。
ItemType を追加した直後とちょっとちがいますね?

さて、BoundField コントロールをすべて DynamicField コントロールに置き換えましょう。

image

これで動かすと、

image

はい、ItemType を追加したときと同じ動きになりました。

これでわかりますかね?
ItemType を設定する前は GridView の内部では BoundField コントロールが使われていて、ItemType を追加すると、DynamicField コントロールが使われるんですね。

GridView の内部で使われるコントロールが変化するあたりは ASP.NET 4 で追加された EnableDynamicData 拡張メソッドを利用したときと一緒です。
というか、拡張メソッドを利用するのはちょっと面倒だったんですが、ItemType プロパティを設定するだけで動くようになった、というのが正しいんですかね?

DynamicField コントロールは検証コントロールまで自動的に追加してくれるのでクライアント側の検証が動作するんですね。
クライアント側の検証では「控えめなバリデーション」が使われるようになったのは 4.5 からなんですが、そのあたりは kiyokura さんの Blog のこの記事で確認してもらうのがよいかな?

DynamicField コントロールについては別にもう少し掘り下げてみようかと思います。
というか、ちょっと面白い動きしたはずなんですが、いま確認とってないので確認でき次第まとめる、ということで。

DynamicField コントロール面白いんですけどね。
いかんせん、情報がないですよね。
EnableDynamicData 拡張メソッドの話も、日本語だと私の Blog の記事とナオキ君が CodeZine に書いた記事ぐらいしか見つからないし。。。

あ、ひとつ注意点を。
DynamicField コントロールを明示的に記述して使うとき、ItemType プロパティの設定を削除するとエラーになります。
VSUG Day でのセッションを聞かれた方は覚えてるかもしれませんが、最後のほうで DynamicField コントロール使おうとしてエラーになって動かなかったのはこのせいでした。

ItemType プロパティのからみで、もうひとつ。
ItemType プロパティを設定しなくてもモデルバインディングは動きます。
それは前回の記事の動作で確認できますよね。

このモデルバインディング、ASP.NET MVC のように汎用的に使えるといろいろと面白いんですが、WebForms ではどうやら特定のコントロールでのみ使えるような感じです。
このあたりもきちんと調べてみないと。。。

というところで、今回の記事はここまで。
次は、、、モデルバインディングの話が先になるかな?

カテゴリー:.NET, ASP.NET 4.5, ASP.NET 備忘録