- PR -

ASP.NET (C#) CompareValidator

1
投稿者投稿内容
ピットうさぎ
会議室デビュー日: 2004/12/15
投稿数: 12
投稿日時: 2005-08-02 10:47
ASP.NET (C#)で開発を行っておりますが
コントロールCompareValidatorを使用し日付の入力チェックを行っておりますが
開始日付と終了日付のテキストボックスを使用し開始日付が
終了日付より大きい場合、CompareValidatorでエラーを表示させたいのですが
うまくいきません。テキストボックスの入力値はYYYY/MM形式です。
CompareValidatorのType属性はDateにしております。
初歩的な質問で申し訳ありませんが
御教示宜しくお願い致します。
セイン
常連さん
会議室デビュー日: 2005/06/15
投稿数: 24
投稿日時: 2005-08-02 13:19
セインです。
私もつい先月挑戦したところです。
まず最初にstring型からDatatime型に変換する必要があります。
その後なら不等号>=< などが使用可能です。
ですので、
if(DateTime.Parse(開始日付TextBox.Text) > DateTime.Parse(終了日付)TextBox.Text)

こうすることで、開始が2005/08/05 終了が2005/07/05 などというデータを見つけることができますよ。
もちろん、DateTime型に直す前に、空白チェックや不適切なデータをはじいておく必要があります。
以下は私が書いたCompareValidatorの出発日>帰着日を発見するものの一部です。



private void CustomValidatorDepatureDay_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
{
if(DateTime.Parse(this.TextBoxDepatureDay.Text) > DateTime.Parse(this.TextBoxReturnDay.Text))
{
CustomValidatorDepatureDay.ErrorMessage ="出発日<帰着日にしてください";
args.IsValid = false;
return;
}
}


最後に。唯一心配なのがyyyy/MM形式をDateTime型に直せるかどうかが気がかりですね。
テストしたところ、そのままではエラーになってしまいます。

DateTime.Parse(開始日付TextBox.Text) →エラー 直せない
ですので、チェック前に"yyyy/MM" +"/dd" をしてあげないと無理かもしれません。

セイン
常連さん
会議室デビュー日: 2005/06/15
投稿数: 24
投稿日時: 2005-08-02 13:37
セインです。

ちょっとわかりにくかったかもしれないので完結に

@日付を補ってDateTime型に変換。チェックする方法
if(
DateTime.Parse(string.Format("{0}/01",開始日付TextBox.Text) >
DateTime.Parse(string.Format("{0}/01",終了日付TextBox.Text)
)

Ayyyy や MM の文字列を取り出してチェックする方法
if(int.Parse(開始yyyy) > int.Parse(終了yyyy))
{
エラー
}
else
{
if(int.Parse(開始MM) > int.Parse(終了MM))
{
エラー
}
}

@の方法が、yyyy/MM/ddに変えたときにも対応がとりやすいので無難だと思います。
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2005-08-02 16:50
引用:

CompareValidatorのType属性はDateにしております。


開始日付、終了日付の桁数が同じであれば、単純にTypeをStringにするだけで良いと思います。
ピットうさぎ
会議室デビュー日: 2004/12/15
投稿数: 12
投稿日時: 2005-08-02 17:25
セイン様、trapemiya様ご回答有難うございます
CompareValidatorのType属性をStringにすれば日付の
属性チェックが出来なくなると思うのですが?
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2005-08-02 19:03
引用:

ピットうさぎさんの書き込み (2005-08-02 17:25) より:
CompareValidatorのType属性をStringにすれば日付の
属性チェックが出来なくなると思うのですが?


日付の属性チェックというのがよくわからないのですが、入力された値が日付として有効であるかどうかということでしょうか?
であれば、CustomValidatorを追加して、日付型にキャストできるかどうかで判断することになります。

CompareValidatorのType属性は、値をどういう型で扱って比較するかを決めるものです。例えば、21と110を比較する場合、TypeをIntegerにすれば、21 > 110 になりますが、TypeをStringにすれば、21 < 110 になります。
1

スキルアップ/キャリアアップ(JOB@IT)