C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 日付の表示


(過去ログ 115 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■68029 / inTopicNo.1)  日付の表示
  
□投稿者/ ほうらい (1回)-(2013/09/17(Tue) 14:22:06)

分類:[ASP.NET (VB)] 

ASP.NET(VB)2008でwebアプリケーションを作成しています。
テキストボックスを配置し、デフォルトで今日の日付を「yyyy/mm/dd」の形式で表示しています。
ユーザーが入力した値をTryParseでチェックし、日付に変換できなければ
今日の日付に戻す、という処理をしています。
ユーザーが日付(/dd)の入力をせずに「2013/09」と入力した場合は、「2013/09/17」と今日の日付に戻したいのですが、「2013/09/01」として認識されているようで、表示は「2013/09」のまま変わりません。
日付を省略した場合「2013/09」だと今日の日付に戻すようにするにはどうすればよいでしょうか?

実装したコードは以下の通りです。

Protected Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox1.TextChanged
Dim dt As Date

'DateTimeに変換できるか確かめる
If Not Date.TryParse(TextBox1.Text, dt) Then
'変換出来なかったら今日の日付に戻す
Dim todaytext As String = DateValue(Now)
TextBox1.Text = todaytext
End If
End Sub

宜しくお願いします。

引用返信 編集キー/
■68030 / inTopicNo.2)  Re[1]: 日付の表示
□投稿者/ 魔界の仮面弁士 (345回)-(2013/09/17(Tue) 14:55:59)
No68029 (ほうらい さん) に返信
> ユーザーが入力した値をTryParseでチェックし、日付に変換できなければ
TryParse ではなく
TryParseExact を使いましょう。

なおこの時、引数に InvariantCulture を指定するようにします。
引用返信 編集キー/
■68032 / inTopicNo.3)  Re[1]: 日付の表示
□投稿者/ WebSurfer (51回)-(2013/09/17(Tue) 16:13:14)
No68029 (ほうらい さん) に返信
> ASP.NET(VB)2008でwebアプリケーションを作成しています。
> テキストボックスを配置し、デフォルトで今日の日付を「yyyy/mm/dd」の形式で表示しています。
> ユーザーが入力した値をTryParseでチェックし、日付に変換できなければ
> 今日の日付に戻す、という処理をしています。

ASP.NET には、ユーザー入力を検証するための種々の Validator が用意
されていますので、それを使うのが基本です。

ポストバックして Prase できるかどうかで検証するなんていう方法は、は
っきり言って、問題外です。

今回のケースでは RequiredFieldValidator と CompareValidator を使うこ
とをお勧めします。

RequiredFieldValidator クラス
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.requiredfieldvalidator(v=vs.110).aspx

CompareValidator クラス
http://msdn.microsoft.com/ja-jp/library/vstudio/system.web.ui.webcontrols.comparevalidator.aspx

CompareValidator の使い方ですが、上のページの中の説明、

"ValidationCompareOperator.DataTypeCheck に Operator のプロパティを
設定すると、CompareValidator のコントロールは ControlToCompare と
ValueToCompare のプロパティを無視し、入力コントロールに入力された値
が BaseCompareValidator.Type のプロパティに指定されたデータ型に変換
できるかどうかを示します。"

に注目してください。

さらに、ユーザー入力を助けるために、以下のようなコンロトール、プラグ
インも用意されているのでそれを使うことも検討してみてください。

Calendar Demonstration
http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/Calendar/Calendar.aspx

Datepicker
http://jqueryui.com/datepicker/
引用返信 編集キー/
■68033 / inTopicNo.4)  Re[2]: 日付の表示
□投稿者/ ほうらい (2回)-(2013/09/17(Tue) 16:16:20)
> TryParse ではなく
> TryParseExact を使いましょう。

TryParseExactで希望通りに動かせました。
魔界の仮面弁士さん、ありがとうございました。

※Validator でやるようにご指導頂いていますので、これからそちらも見ます。

引用返信 編集キー/
■68034 / inTopicNo.5)  Re[2]: 日付の表示
□投稿者/ ほうらい (3回)-(2013/09/17(Tue) 16:51:43)
2013/09/17(Tue) 16:53:31 編集(投稿者)
2013/09/17(Tue) 16:52:58 編集(投稿者)

No68032 (WebSurfer さん) に返信
> ポストバックして Prase できるかどうかで検証するなんていう方法は、は
> っきり言って、問題外です。
>
> 今回のケースでは RequiredFieldValidator と CompareValidator を使うこ
> とをお勧めします。


アドバイスありがとうございます。

> さらに、ユーザー入力を助けるために、以下のようなコンロトール、プラグ
> インも用意されているのでそれを使うことも検討してみてください。
>
> Calendar Demonstration
> http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/Calendar/Calendar.aspx
>
> Datepicker
> http://jqueryui.com/datepicker/

こういうのを実装するとアプリのグレードがググッと上がりますね。
時間があったらこちらも作ってみたいと思います。
貴重なアドバイス、本当にありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -