- PR -

エラーチェック(Validator)について

1
投稿者投稿内容
ぴお
会議室デビュー日: 2004/01/16
投稿数: 10
投稿日時: 2004-01-16 21:18
いつもお世話になっております。
いつも、こちらで、勉強させて頂いています。

1.
同一の画面上で異なるエラーチェック(Validator)を行いたいと思います。
ボタンを2つ設置します(仮にボタンA・ボタンBとします。)
テキストボックスを2つ設置します。(仮にテキストA・テキストBとします。)
ボタンAは、テキストAは入力チェックし、テキストBは入力チェックしません。
ボタンBは、テキストAは入力チェックせず、テキストBは入力チェックします。
このような処理は、可能でしょうか

2.
DATAGRIDとボタンを設置します。
DATAGRIDに表示レコードが存在しない状態で、
ボタンをクリックした場合、エラーチェック(Validator)を
使用したチェックは可能でしょうか

ちなみに、開発環境は、Win2kSrvとvs.net2003です。

いろいろな方法で調査しましたが、
有力な情報が得られませんでした。
初投稿になりますが、
皆様、ご教授の程、よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-16 21:22
 Windowsアプリケーションですか?Webアプリケーションですか?

 Webアプリケーションで、お望みのような処理をしています。
ぴお
会議室デビュー日: 2004/01/16
投稿数: 10
投稿日時: 2004-01-17 10:05
WEBアプリケーションです。

お手数ですが、ご教授の程、お願いします。
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2004-01-17 11:34
色々なパターンがありますので、一概には言えませんが・・・。

さて、まず2ですが、
>DATAGRIDとボタンを設置します。
>DATAGRIDに表示レコードが存在しない状態で、
>ボタンをクリックした場合、エラーチェック(Validator)を
>使用したチェックは可能でしょうか
このチェックの具体的な内容がよく見えませんが、
あくまでも一般論で普通の作り方としては
☆DATAGRIDを使う場合、サーバサイドで生成しているので、
 データの有無はその時点でわかっているのが普通。
☆となれば、WebだとかStandAloneアプリだとかの次元を
 超えて、一般的なユーザーインターフェイスとしては、
 そのボタンが押されてから、検証するのではなく
  ・ボタンそのものを表示しない(Invisible)
・ボタンをグレー表示してUnable化
 すべきではないでしょうか。
☆Web,C#だとすると、このボタンのスタイルを
  objButton.Styles.Add("background-color","gray");
として、(綴りはうろ覚えなので確かめてね。)
  かつ、
  objButton.Attributes.Add("onclick","javascript:return false;");
 としておけばよいのではないでしょうか。

1はA,B用にそれぞれValidatorを配するなどの方法があります。
Check内容がデータ型のチェックなのか、
必須入力の空入力防止なのかは不明ですが、
仮に前者だとするとこんな感じのコードを作ったことがあります。
必須入力から入力防止なら、RequiredValidatorに変えればよいです。
/// <param name="checktargetid">検証対象コントロールのID</param>
/// <param name="validatorid">このValidatorに付与するID</param>
/// <param name="checktype">データ型の定義</param>
/// <param name="cssname">CSSクラス(spanタグのクラスを使用してください。)</param>
/// <returns>Panelコントロール</returns>
public static Panel CreateTextBoxValidatorWithCSS
( string checktargetid , string validatorid , ValidationDataType checktype , string cssname)
{
Panel panel = new Panel();
panel.ID = validatorid + "|panel";
CompareValidator compValid = new CompareValidator();
// 検証先のテキストボックスを設定します。
compValid.ControlToValidate = checktargetid;
compValid.Display = ValidatorDisplay.Static;
compValid.Operator = ValidationCompareOperator.DataTypeCheck;
compValid.ID = validatorid ;
compValid.Type = checktype;
compValid.CssClass = cssname;

string template = "入力された値は{0}ではありません。";
string param = null;

switch ( checktype)
{
case ValidationDataType.Currency:
param = "通貨";
break;
case ValidationDataType.Date:
param = "日付";
break;
case ValidationDataType.Double:
param = "数字";
break;
case ValidationDataType.Integer:
param = "整数値";
break;
case ValidationDataType.String:
param = "文字";
break;
default:
break;
}
compValid.ErrorMessage = String.Format( template , param );
panel.Controls.Add( compValid );
return panel;
}


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-01-17 13:22
引用:

ぴおさんの書き込み (2004-01-17 10:05) より:
WEBアプリケーションです。

お手数ですが、ご教授の程、お願いします。


 入力検証コントロールは、1つにつき1つのコントロールに対してしか検証(した結果を表示)できません。ですから、テキストA用の検証コントロール、テキストB用の検証コントロールを置きます。
 つぎに、このままですとボタンAでもボタンBでも、どちらでも必ず検証A、検証Bが行われます。が、まずはこのまま実行し、HTMLソースを確認してください。onclick属性に追加されているスクリプトをコピーしておきます。
 その次に、aspxファイルにスクリプトを追加します。こんな感じかな?
<script>
function btnAClick() {
// ここで検証Aをenableにする
// ここにonclickに追加されていたスクリプトをコピー
}
function btnBClick() {
// ここで検証Bをenableにする
// ここにonclickに追加されていたスクリプトをコピー
}
</script>
 そして、ボタンの検証を引き起こすプロパティをfalseにセットします。
 最後に、page.loadイベントハンドラなどで、ボタンコントロールのonclick属性に先ほどの関数をコールするようにします。

[追加]
 コード中に「検証Aをenableにする」と書いているとおり、検証A,Bはdisable状態にしておきます。
 また、クライアントスクリプトを使用することを前提にしています。

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-01-19 08:16 ]
ぴお
会議室デビュー日: 2004/01/16
投稿数: 10
投稿日時: 2004-01-19 09:02
platiniさん・Jittaさん、

返答ありがとうございます。
早速、テストプログラムを作成してみます。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-01-19 15:59
こんにちは

もしサーバ側で処理するのであれば以下の方法で実現できると思います。


ValidatorコントロールをValidatorEditA、ValidatorEditBとします。

ValidatorコントロールのEnableClientScriptをFalseにします。
これでサーバ側でエラーチェックをするようになります。

ボタンA、BのCausesVaildationプロパティをFalseに設定します。
これでボタンを押した場合、エラーチェックしなくなります。

この状態でそれぞれのボタンのクリックイベントでエラーチェックを行います。

OnButtonAClick()
{
ValidatorEditA.Validate();
if( ValidatorEditA.IsValid == false )
return;

// OnClick時の処理
}
OnButtonBClick()
{
ValidatorEditB.Validate();
if( ValidatorEditB.IsValid == false )
return;

// OnClick時の処理
}


[ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2004-01-19 17:11 ]
ぴお
会議室デビュー日: 2004/01/16
投稿数: 10
投稿日時: 2004-01-20 13:36
具体的なソースをありがとうございます。

実際に動作するようになりました。
1

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