IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

EntityFramework et Validation de données


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Junior développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Points : 113
    Points
    113
    Par défaut EntityFramework et Validation de données
    Bonjour,


    Je suis actuellement en cours de réalisation d'un formulaire mais je ne sais pas comment faire la validation des données entrées par l'utilisateur;


    Lorsque je bind ma view sur une donnée de mon ViewModel ma view est capable de détecter les erreurs de types; c'est-à-dire que si je mets une String dans une variable bindé de type Int j'ai un cadre rouge qui s'affiche, de cette façon :

    Nom : Capture.PNG
Affichages : 118
Taille : 741 octets


    J'ai aussi cette exception qui vient avec dans mon affichage console ( sa me parait normal et pas dangereux car, oui la valeur n'a pas le bon type) :
    System.Windows.Data Error: 7 : ConvertBack cannot convert value 'jh' (type 'String'). BindingExpressionath=CommandeFournisseur.Delai; DataItem='CommandeFournisseurViewModel' (HashCode=15323058); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String') FormatException:'System.FormatException: Le format de la chaîne d'entrée est incorrect.
    à System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
    à System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
    à System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
    à System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture)'

    Ma view est binder de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      <Label Grid.Column="0" Grid.Row="4">Délai :</Label>
                <!--<TextBlock Grid.Column="0" Grid.Row="4" Text="Délai" />-->
                <TextBox   Grid.Column="1" Grid.Row="4" Text="{Binding CommandeFournisseur.Delai, ValidatesOnDataErrors=True}" />
    et mon model est celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
       [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
            [DataMemberAttribute()]
            public Nullable<global::System.Int32> Delai
            {
                get
                {
                    return _Delai;
                }
                set
                {
                    OnDelaiChanging(value);
                    ReportPropertyChanging("Delai");
                    _Delai = StructuralObject.SetValidValue(value);
                    ReportPropertyChanged("Delai");
                    OnDelaiChanged();
                }
            }
            private Nullable<global::System.Int32> _Delai;
            partial void OnDelaiChanging(Nullable<global::System.Int32> value);
            partial void OnDelaiChanged();


    Mon problème intervient lorsque je définis une taille max à un type String. Admettons une variable Tel qui est un NVarchar(10) en BDD et donc String dans mon appli.

    De cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
            [DataMemberAttribute()]
            public global::System.String Telephone
            {
                get
                {
                    return _Telephone;
                }
                set
                {
                    OnTelephoneChanging(value);
                    ReportPropertyChanging("Telephone");
                    _Telephone = StructuralObject.SetValidValue(value, true);
                    ReportPropertyChanged("Telephone");
                    OnTelephoneChanged();
                }
            }
            private global::System.String _Telephone;
            partial void OnTelephoneChanging(global::System.String value);
            partial void OnTelephoneChanged();
    Lorsque je tape une chaine de plus de 10 caractères dans la TextBox , celle-ci ne se colore pas en rouge. Comment puis-je faire pour imiter le comportement sur la vérification de type ? Et l'encadrer de rouge si la valeur et plus grande que ce que peut stocker la base de données.

  2. #2
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Regarde du côté de l'attribut [StringLength] :

    Il est compris par EF et devrait l'être aussi par les autres frameworks comme WPF et ASP.Net.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Junior développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Points : 113
    Points
    113
    Par défaut
    j'ai essayé [StringLength(10)] et [MaxLenght(10)] mais en vain...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
            [DataMemberAttribute()]
     
          [StringLength(10)]
     
            public global::System.String Telephone
            {
                get
                {
                    return _Telephone;
                }
                set
                {
                    OnTelephoneChanging(value);
                    ReportPropertyChanging("Telephone");
                    _Telephone = StructuralObject.SetValidValue(value, true);
                    ReportPropertyChanged("Telephone");
                    OnTelephoneChanged();
                }
            }
            private global::System.String _Telephone;
            partial void OnTelephoneChanging(global::System.String value);
            partial void OnTelephoneChanged();

  4. #4
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    bonjour,

    c'est peut être pas la meilleurs solution mais tu peux déjà limiter la taille de la valeur de ton champ. ergonomiquement l'utilisateur verra qu'il ne peut pas saisir plus de 10 cars.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur Junior développement logiciels
    Inscrit en
    Mai 2014
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Junior développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 198
    Points : 113
    Points
    113
    Par défaut
    Pas faux. Je vais faire sa en attendant de trouver une réelle option pour réaliser ce que je souhaite.

Discussions similaires

  1. [Excel] Validation de données
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/12/2005, 19h35
  2. Problème de validation de données
    Par loutsky dans le forum Access
    Réponses: 3
    Dernier message: 23/11/2005, 14h11
  3. validation de donnée... et post
    Par sonialem2000 dans le forum Bases de données
    Réponses: 12
    Dernier message: 13/07/2004, 02h34
  4. dbgrid AND validation des données
    Par samlerouge dans le forum Bases de données
    Réponses: 10
    Dernier message: 11/06/2004, 23h08
  5. Validation de données à partir d'un XML Schema
    Par leup dans le forum Valider
    Réponses: 2
    Dernier message: 10/06/2004, 08h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo