« MediaWikiその3 | メイン | ASPのファイルアクセス権 »

2006年01月05日

仕事の周辺 » .NET

ASP.NETでDateTimePicker

抽出条件に日付を使うことが多いのですが、PHP使いから、ASPでもポップアップのカレンダーから日付を選択できるようにできないのか、といわてしまいました。XOOPSのpiCalでも使われているあれですね。
カレンダーコントロールの存在は知っていたので、できるはず、と返事して調べて回ると、カレンダーコントロールをJavaScriptでポップアップされるタイプのものがヒットしました。1箇所に付けると、あちらからもこちらからもご要望が出そうでJavaScriptをコピって回るのやだな、と思ってさらに検索を続けると、WindowsアプリにはDateTimePickerとそのものずばりのコントロールがあるらしい。で、今度はDateTimePickerとASP.NETで検索すると、コードプロジェクトにありました。ラッキー!と思ったわりには半日仕事だったのでポイントをメモ。
まず「指定された引数は、有効な値の範囲内にありません。パラメータ名 : Year、Month および Day パラメータが表現できない DateTime を示しています。」のエラー。どうも原因は日本語版と英語版のカレンダーコントロールの違いかなぁ(全然自信なし)。ダウンロード先にある画面キャプチャの日付が 4/22/2004 になっているのに、自分で実行すると 2006/01/05 となるのがその根拠。で、ソースを開き、Yearで検索したら year=Convert.ToInt32(cons[2]); というような箇所が2箇所あったので、この並びを変えてやろうじゃないかということに。結果的に下記でうまくいきました。

year=Convert.ToInt32(cons[0]);
month=Convert.ToInt32(cons[2]);
day=Convert.ToInt32(cons[1]);

これで無事例題が動き、カスタムコントロールに追加でき、使いたいプロジェクトを開きコントロールをボトっとドロップ。出来た出来た!で、実行したら今度は「オブジェクト参照がオブジェクト インスタンスに設定されていません。 」というエラー。これも意味不明だったのですが、例題がGridLayoutだったので、FlowLayoutからGridLayoutへ変更したら動きました。カレンダーコントロールを表示する座標を、コントロールに記述された絶対座標から読んでるのかも。
結局やっていることは同じなのですが、カスタムコントロールになっているのは非常に便利です。

投稿者 idic : 2006年01月05日 20:45

コメント

コメントしてください

サイン・インを確認しました、 さん。コメントしてください。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?