0

初めてValidationproviderコントロールを使用しています。Ent Libのインストールに付属するValidationQuickStartソリューションの例で見た機能を模倣しようとして、成功は限られていました。

BOプロパティを次のような検証属性で装飾するビジネスオブジェクト検証に基づいて、フォームエラープロバイダーアイコンを表示することはできましたが、

<NotNullValidator(MessageTemplate:="Gender must be specified.", RuleSet:="MyRule", Tag:="Gender")> _
      Public Shadows Property Gender() As String
        Get
            Return MyBase.Gender
        End Get
        Set(ByVal value As String)
            MyBase.Gender = value
        End Set
    End Property

ただし、「SelfValidation」メソッドに編集を追加したい場合、結果をフォームコントロールに関連付けるにはどうすればよいですか?

(In Self Validation)

If Me.Attornet s Nothing Then
    Dim result As New ValidationResult("Attorney selection is required", Me, Nothing, Nothing, Nothing)
    results.AddResult(result)
End If

または、独自の** CUSTOM VALIDATORを作成する必要がありますか? "そしてそのタイプを使用してビジネスオブジェクトプロパティを装飾しますか?

編集:

ValidationProviderコントロールが、次のようなクロスコントロール検証を目的としていない場合:

ユーザーがビジネスオプションプロパティCustomer.DoYouSmokeCrackAsBooleanに対応するラジオボタングループで[はい]オプションを選択した場合、このフィールドが条件付きで必須であることを示すErrorProviderアイコンでtxtHowMuchコントロールにフラグを立てる必要があります。

現在これを行っている方法は、Self Validationブロックでこれを行うことです。コレクションにValidationResultオブジェクトを追加するときに、Keyプロパティを "Explanation"に設定して、GUIが問題のある画面に手動でマップできるようにします。コントロール。

これを行うためのより標準的な/より良い方法はありますか?

4

1 に答える 1

2

を使用して自己検証(またはその他のクロスプロパティ検証)を使用することはできませんValidationProviderValidationProviderビジネスオブジェクトが存在しない状態で動作するため、動作しません。単一のプロパティに対して定義されたすべての検証をロードし、それらの検証を使用して特定のコントロールの値を確認します。

カスタムバリデーターや自己検証などのクロスプロパティ検証が機能するには、完全に初期化されたビジネスオブジェクトが必要です。

検証が単純で、単一のプロパティを検証する場合(データベースにアクセスするなどの操作を行わずに)、カスタム検証属性を記述して検証を行うことができます。他のすべての場合、ユーザーが「保存」を押した後にビジネスオブジェクトを作成し(とにかく実行する可能性があります)、その時点でオブジェクトを検証する必要があります。つまり、ユーザーが変更をコミットするまで検証を遅らせます。

于 2011-04-19T20:52:32.583 に答える