きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

ObjectDataSource

いろいろ弄っていると、結局のところ、ASP.NET 2.0で業務用AP作るときは『ObjectDataSourceとObjectDataSourceソースオブジェクトが肝』、とうのが見えてきた気がする。


問題は、ソースオブジェクトとして使うクラスのSelectMothod用のメソッドとかに、どうやって検索用のパラメータを渡すか、にあると思える。


検索用メソッドの引数として必要なパラメータを受け取るようにして、SelectParametersに一つずつ設定するのが素直に見えるけど、パラメータソースをNoneにすると実行時にコードから値を設定することを考えると、SelectParameters("hoge").DefultValueに値を設定することになると思われるが、SelectParameters("hoge").DefultValueはString型なので、なんかしっくりこない(まあ、問題なく動くのだけれど)。


また、検索の用途によってはたくさんパラメータが必要になることもあると思うけど、メソッドの引数を大量に指定するのも、なんだかなぁ、と思える。


なら、構造体かクラスを受け渡すようにする……ことを考えみたが、上記のとおりSelectParametersのDefultValueの型のおかげでスマートにいかない。
#実は、私はここが納得いっていない。DefultValueがなんでObject型じゃないのかと思う。GUIでSelectParametersコレクションの設定すると、aspxに書き出されるSelectParameterの型としてはObject型も指定できるのに。


コード以外からパラメータの値を設定する方法としてSession変数やCookiesから直接読みとる方法があるので、それ経由で構造体を渡してみると、期待通りに動作するのは確認できた。
……しかし、そんなのでSession変数とかあんまり使いたくないなぁ……とか思ったけど、よくよく考えると、結局のところあれか。GridViewとかで、一度検索条件をセットして抽出した後、同一条件のままソーティングやページングでポストバックが行われた時に、以前セットした検索条件をどこで保持しておくのか、ということがあるからか。


うーん、なんか大きく勘違いしてる気がする……けど、『ObjectDataSourceとObjectDataSourceソースオブジェクトが肝』というのは間違っていないと思うので、この路線でもうしばらく弄ってみよう……。