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
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 ?
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
oui tu peux, regarde par ici: http://mtaulty.com/CommunityServer/b...alidation.aspx
Les règles du forum
Le trio magique : FAQ + Cours + fonction rechercher
Mes articles
Pas de questions par messages privés svp
Software is never finished, only abandoned.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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....
Thomas LEBRUN: MCAD.NET, MCTS (Win et Web), MCPD(Win et Web) & Microsoft MVP Client Application Development
WPF par la pratique, mon livre sur WPF ! (également disponible ici ou là)
A la découverte de .NET
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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 MoZo
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
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>
Partager