Procédure pas à pas : Édition des données d'un service de domaine

Dans cette procédure pas à pas, vous allez apprendre comment créer une interface qui permet à l'utilisateur de modifier les données affichées et d'enregistrer ces modifications dans les bases de données.

Lorsque vous avez ajouté des méthodes de mise à jour, d'insertion ou de suppression dans un service de domaine, vous pouvez créer une interface dans un client Silverlight qui permet aux utilisateurs de modifier les données. Toutes les modifications sont suivies dans un objet EntityChangeSet et soumises collectivement à l'appel de la méthode SubmitChanges.

Configuration requise

Cette procédure pas à pas, ainsi que les autres procédures du même type présentées dans la documentation des Services RIA WCF, nécessite au préalable l'installation et la configuration correctes de plusieurs programmes, tels que Visual Studio 2010 et le Developer Runtime et SDK Silverlight, en plus des Services RIA WCF et du kit de ressources des Services RIA WCF. Ces procédures nécessitent également l'installation et la configuration de SQL Server 2008 R2 Express with Advanced Services et l'installation de la base de données AdventureWorks OLTP et LT.

Vous trouverez des instructions détaillées pour satisfaire chacune de ces conditions préalables dans les rubriques du nœud Conditions préalables pour les Services RIA WCF. Suivez ces instructions avant de poursuivre, pour être sûr de rencontrer le moins de problèmes possibles en effectuant ces procédures pas à pas des Services RIA .

Cette procédure pas à pas suppose que vous avez suivi les instructions de Procédure pas à pas : Création d'une solution de Services RIA et poursuit avec l'application créée à l'aide de ces procédures.

Pour afficher et modifier des données d'un service de domaine

  1. Ouvrez la solution RIAServicesExample de Procédure pas à pas : Création d'une solution de Services RIA.

  2. Dans MainPage.xaml, modifiez l'interface pour permettre à l'utilisateur d'enregistrer ou de refuser des modifications dans le DataGrid.

    Le XAML suivant ajoute un bouton Enregistrer les modifications, un bouton Refuser les modifications et un bloc de texte.

    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="40"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel HorizontalAlignment="Center" Grid.Row="0" Orientation="Horizontal">
            <Button Content="Save Changes" Click="SaveButton_Click" Margin="5" x:Name="SaveButton"></Button>
            <Button Content="Reject Changes" Click="RejectButton_Click" Margin="5" x:Name="RejectButton"></Button>
            <TextBlock x:Name="ChangeText" VerticalAlignment="Center" Width="Auto"></TextBlock>
        </StackPanel>
        <data:DataGrid Grid.Row="1" Name="CustomerGrid" RowEditEnded="CustomerGrid_RowEditEnded"></data:DataGrid>
    </Grid>
    
  3. Dans la page code-behind de MainPage.xaml, ajoutez des gestionnaires d'événements pour les événements de clic de bouton, un gestionnaire d'événements pour l'événement RowEditEnded, une méthode de rappel nommée OnSubmitCompleted et une méthode qui évalue les modifications en attente.

    Private Sub SaveButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        _customerContext.SubmitChanges(AddressOf OnSubmitCompleted, Nothing)
    End Sub
    
    Private Sub RejectButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        _customerContext.RejectChanges()
        CheckChanges()
    End Sub
    
    Private Sub CustomerGrid_RowEditEnded(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridRowEditEndedEventArgs)
        CheckChanges()
    End Sub
    
    Private Sub CheckChanges()
        Dim changeSet = _customerContext.EntityContainer.GetChanges()
        ChangeText.Text = changeSet.ToString()
    
        Dim hasChanges = _customerContext.HasChanges
        SaveButton.IsEnabled = hasChanges
        RejectButton.IsEnabled = hasChanges
    End Sub
    
    Private Sub OnSubmitCompleted(ByVal so As SubmitOperation)
        If (so.HasError) Then
            MessageBox.Show(String.Format("Submit Failed: {0}", so.Error.Message))
            so.MarkErrorAsHandled()
        End If
        CheckChanges()
    End Sub
    
    private void SaveButton_Click(object sender, RoutedEventArgs e)
    {
        _customerContext.SubmitChanges(OnSubmitCompleted, null);
    }
    
    private void RejectButton_Click(object sender, RoutedEventArgs e)
    {
        _customerContext.RejectChanges();
        CheckChanges();
    }
    
    private void CustomerGrid_RowEditEnded(object sender, DataGridRowEditEndedEventArgs e)
    {
        CheckChanges();
    }
    
    private void CheckChanges()
    {
        EntityChangeSet changeSet = _customerContext.EntityContainer.GetChanges();
        ChangeText.Text = changeSet.ToString();
    
        bool hasChanges = _customerContext.HasChanges;
        SaveButton.IsEnabled = hasChanges;
        RejectButton.IsEnabled = hasChanges;
    }
    
    private void OnSubmitCompleted(SubmitOperation so)
    {
        if (so.HasError)
        {
            MessageBox.Show(string.Format("Submit Failed: {0}", so.Error.Message));
            so.MarkErrorAsHandled();
        }
        CheckChanges();
    }
    

Pour définir des métadonnées pour l'entité à mettre à jour

  1. Dans le projet serveur, ouvrez la classe de métadonnées nommée Customer.metadata.cs ou Customer.metadata.vb.

    Pour plus d'informations, consultez Procédure : Ajouter des classes de métadonnées.

  2. Dans la classe de métadonnées, ajoutez l'attribut EditableAttribute avec la propriété AllowEdit définie avec la valeur false aux propriétés CustomerID et ModifiedDate.

    Vous appliquez l'attribut EditableAttribute à une propriété pour indiquer si la propriété est destinée à être modifiée par un utilisateur dans une application cliente. Lorsque vous affectez à la propriété AllowEdit la valeur false, la propriété est en lecture seule dans l'application cliente. Dans cet exemple, vous affichez les valeurs des propriétés CustomerID et ModifiedDate, mais ne voulez pas que l'utilisateur les modifie.

  3. Ajoutez l'attribut ExcludeAttribute à la propriété rowguid.

    Vous appliquez l'attribut ExcludeAttribute aux propriétés que vous ne voulez pas inclure dans le code généré pour le projet client. Dans cet exemple, il n'y a aucune raison d'exposer la propriété rowguid dans le projet client.

    Les éléments suivants montrent le contenu de la classe de métadonnées.

    <MetadataTypeAttribute(GetType(Customer.CustomerMetadata))>  _
    Partial Public Class Customer
    
        Friend NotInheritable Class CustomerMetadata
    
            'Metadata classes are not meant to be instantiated.
            Private Sub New()
                MyBase.New
            End Sub
    
            <Editable(False)> _
            Public CustomerID As Integer
    
            <Editable(False)> _
            Public ModifiedDate As DateTime
    
            <Exclude()> _
            Public rowguid As Guid
    
    
        End Class
    End Class
    
    [MetadataTypeAttribute(typeof(Customer.CustomerMetadata))]
    public partial class Customer
    {
        internal sealed class CustomerMetadata
        {
    
            // Metadata classes are not meant to be instantiated.
            private CustomerMetadata()
            {
            }
    
            [Editable(false)]
            public int CustomerID;
    
            [Editable(false)]
            public DateTime ModifiedDate;
    
            [Exclude]
            public Guid rowguid;
    
        }
    }
    
  4. Ajoutez les instructions using ou Imports requises pour les espaces de noms, tels que System.ComponentModel.DataAnnotations et System.ServiceModel.DomainServices.Server.

  5. Exécutez l'application (F5).

    Remarquez que vous pouvez modifier les valeurs dans le DataGrid. Lorsque vous quittez la ligne vous avez modifiée, la valeur ChangeText est mise à jour avec une description des modifications en attente. Lorsque vous cliquez sur le bouton Enregistrer les modifications, les modifications des données sont enregistrées dans la base de données. Lorsque vous cliquez sur le bouton Refuser les modifications, toutes les modifications en attente sont annulées.