Bonjour,
Voila j'aurai voulu savoir savoir si il était possible de mettre en place un système de validation des données mais sans utilisations de RIA service (dans un datagrid par exemple) ?
Cordialement MoZo
Version imprimable
Bonjour,
Voila j'aurai voulu savoir savoir si il était possible de mettre en place un système de validation des données mais sans utilisations de RIA service (dans un datagrid par exemple) ?
Cordialement MoZo
Avec les ValidationRules ?
oui tu peux, regarde par ici: http://mtaulty.com/CommunityServer/b...alidation.aspx
Merci de vos réponse, mais en fait j'ai peur de ne pas trop comprendre :
J'utilise un service WCF qui exécute une requête sur ma base de données afin de remplir mon datagrid comme ceci :
Service :
ds la page de mon Datagrid :Code:
1
2
3
4
5
6
7 [OperationContract] public List<Contact> Get_ListeContacts() { PlateformeCommercialDataClassesDataContext dc = new PlateformeCommercialDataClassesDataContext(); var ListeDesContacts = (from Contact in dc.Contacts select Contact).ToList(); return ListeDesContacts; }
xaml :Code:
1
2
3
4
5 void Serv_Get_ListeContactsCompleted(object sender, Get_ListeContactsCompletedEventArgs e) { MonDataGrid.ItemsSource = e.Result; }
Je ne comprend pas trop a quel endroit je doit modifer les "setter" (get/set) ? Est-ce dans ma classe LinQ to SQL (pourtant situé coté serveur) ?Code:
1
2
3
4
5
6
7
8
9
10 <data:DataGrid Grid.Row="0" AutoGenerateColumns="False" HeadersVisibility="All" x:Name="MonDatagrid" ColumnWidth="85" RowHeight="30" CanUserResizeColumns="True" Width="Auto" Height="Auto" IsEnabled="True" Visibility="Visible" Margin="0,21,0,8"> <data:DataGrid.Columns> <data:DataGridTextColumn Header="ID" Binding="{Binding Path=Contact_ID, Mode=TwoWay}" Width="19" /> <data:DataGridTextColumn Header="Nom" Binding="{Binding Path=Contact_Nom, Mode=TwoWay}" Width="120" /> <data:DataGridTextColumn Header="Prénom" Binding="{Binding Path=Contact_Prenom, Mode=TwoWay}" Width="120" /> <data:DataGridTextColumn Header="Strucure" Binding="{Binding Path=Contact_Structure, Mode=TwoWay}" Width="120" /> <data:DataGridTextColumn Header="Fonction" Binding="{Binding Path=Contact_Fonction, Mode=TwoWay}" Width="120" /> <data:DataGridTextColumn Header="Coordonnées" Binding="{Binding Path=Contact_Coordonnees, Mode=TwoWay}" Width="120" /> </data:DataGrid.Columns> </data:DataGrid>
Je suis tombé sur ça hier, mais j'ai pas lu dans le détail, je sais pas si ça correspond à ce que tu veux
http://wildermuth.com/2009/09/28/Int...roject_Niagara
Hello,
Il te faut mettre en place une couche intermédiaire entre le proxy client WCF généré coté Silverlight et le binding dans ta grille.
Je serais donc tenté de t'inciter à utiliser le pattern MVVM.
1 - Construit un modèle intermédiare (ViewModel) pour tes vues alimenté par les objets venant de ton service WCF
2 - Enrichie ce modèle pour qu'il lève une exception de validation sur le setter
2 - Utilise le binding de ta vue sur ce ViewModel et tu auras un résultat similaire à ce que propose .NET RIA Services out of the box.
Si le sujet t'intéresse et que tu es libre demain, viens à la journée Industrialisation des développements N-tiers : http://blogs.msdn.com/mitsufu/archiv...lverlight.aspx :)
Bye,
David Rousset
Microsoft France
Ce qui serait top, c'est sur Silverlight dispose de IDataErrorInfo mais ce n'est pas disponible à l'heure actuelle....
Merci beaucoup de vos réponses,
Je vais essayer la methode de davrous et je posterais du code si j'arrive a le faire. Encore merci a tous !!
Cordialement MoZo
:D J'ai réussi a implémenter la validation des données en m'inspirant de vos réponses (particulièrement de davrous) donc merci a tous pour votre aide :
1 ) Construit un modèle intermédiare (ViewModel) pour tes vues alimenté par les objets venant de ton service WCF :
j'ai donc créer une classe ContactValidate (coté client) qui possède les mêmes attribut que ma classe Contact(coté serveur) représentant les données de ma base.
Donc a chaque fois que je doit binder mes données je trasforme Mon Contact en un ContactValidate comme ceci :
J'instancie un ContactValidate a l'aide d'un Contact passer en parametre.Code:
1
2
3
4
5
6
7
8
9
10
11 public ContactValidate(Contact _LeContact) { Contact_ID = _LeContact.Contact_ID; Contact_Nom = _LeContact.Contact_Nom; Contact_Prenom = _LeContact.Contact_Prenom; Contact_Structure = _LeContact.Contact_Structure; Contact_Fonction = _LeContact.Contact_Fonction; Contact_Coordonnees = _LeContact.Contact_Coordonnees; Contact_Problematique = _LeContact.Contact_Problematique; }
2 ) Enrichie ce modèle pour qu'il lève une exception de validation sur le setter
j'ai donc enrichie les setter de ma classe ContactValidate :
(ds ma classe ContactValidate.cs :
Dans ma Page.xaml.cs :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 private string contact_Nom; public string Contact_Nom { get { return this.contact_Nom; } set { this.contact_Nom = value; if (value.Length>5) { throw new InvalidDataException("Bad length on that string"); } FirePropertyChanged("Contact_Nom"); } } void FirePropertyChanged(string property) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(property)); } } //je l'ai mis là mais peut etre mis dans une classe a part entiere public class InvalidDataException : Exception { public InvalidDataException(string msg) : base(msg) { } }
et enfin ma page.xaml :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 private void OnValidationError(object sender, ValidationErrorEventArgs e) { switch (e.Action) { case ValidationErrorEventAction.Added: Exception ex = e.Error.Exception; break; case ValidationErrorEventAction.Removed: break; default: break; } }
Merci a tous de votre aide, Cordialement MoZoCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <controls:ChildWindow xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="PlateformeContactCommerciaux.Controls.DetailContactChildWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" xmlns:local="clr-namespace:PlateformeContactCommerciaux.Classes" Width="900" Height="500" Title="Détail du Contact"> <Grid x:Name="LayoutRoot" Margin="2" ShowGridLines="False" BindingValidationError="OnValidationError"> <Grid.ColumnDefinitions> <ColumnDefinition Width="130"></ColumnDefinition> <ColumnDefinition Width="180"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="30"></RowDefinition> <RowDefinition Height="30"></RowDefinition> <RowDefinition Height="30"></RowDefinition> <RowDefinition Height="30"></RowDefinition> <RowDefinition Height="40"></RowDefinition> <RowDefinition Height="25"></RowDefinition> </Grid.RowDefinitions> <TextBlock Height="25" Grid.Row="0" Grid.Column="0" Text="Nom :"></TextBlock> <TextBlock Height="25" Grid.Row="1" Grid.Column="0" Text="Prenom :"></TextBlock> <TextBlock Height="25" Grid.Row="2" Grid.Column="0" Text="Structure :"></TextBlock> <TextBlock Height="25" Grid.Row="3" Grid.Column="0" Text="Fonction :"></TextBlock> <TextBlock Height="40" Grid.Row="4" Grid.Column="0" Text="Coordonnées :"></TextBlock> <TextBlock Height="25" Grid.Row="5" Grid.Column="0" Text="Problématique :" VerticalAlignment="Bottom"></TextBlock> <TextBox Height="25" Grid.Row="0" Grid.Column="1" x:Name="Tb_Nom" Text="{Binding Contact_Nom,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"></TextBox> <TextBox Height="25" Grid.Row="1" Grid.Column="1" x:Name="Tb_Prenom" Text="{Binding Contact_Prenom,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"></TextBox> <TextBox Height="25" Grid.Row="2" Grid.Column="1" x:Name="Tb_Structure" Text="{Binding Contact_Structure,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"></TextBox> <TextBox Height="25" Grid.Row="3" Grid.Column="1" x:Name="Tb_Fonction" Text="{Binding Contact_Fonction,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"></TextBox> <TextBox Height="25" Grid.Row="4" Grid.Column="1" x:Name="Tb_Coordonnées" Text="{Binding Contact_Coordonnees,Mode=TwoWay,ValidatesOnExceptions=True,NotifyOnValidationError=True}"></TextBox> </Grid>