1 pièce(s) jointe(s)
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 :
Pièce jointe 151310
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) :
Citation:
System.Windows.Data Error: 7 : ConvertBack cannot convert value 'jh' (type 'String'). BindingExpression:Path=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:
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:
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:
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.