zoukankan      html  css  js  c++  java
  • Silverlight WCF RIA服务(二十六)Silverlight 客户端 7

    演练:编辑来自域服务的数据 当我们在域服务中添加了更新、插入或删除方法时,我们就可以在Silverlight客户端创建一个接口来让用火修改数据。EntityChangesSet对象跟踪所有的改变,并且这些改变在我们调用SubmitChanges方法时一起提交。 在这个演练中,我们将学习如何创
      

    演练:编辑来自域服务的数据
    当我们在域服务中添加了更新、插入或删除方法时,我们就可以在Silverlight客户端创建一个接口来让用火修改数据。EntityChangesSet对象跟踪所有的改变,并且这些改变在我们调用SubmitChanges方法时一起提交。
    在这个演练中,我们将学习如何创建一个让用户修改所显示数据的接口,并且将这些修改保存到数据库。

    演练

    1. 打开RIAServicesExample项目。(参见 WCF RIA 服务 三)
    2. 在MainPage.xaml中,更改界面让用户可以保存或拒绝DataGrid中的更改。下面的XAML添加了一个Save Changes按钮和Reject Changes按钮,以及一个更改文本框。
     

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <GRID x:Name="LayoutRoot" Background="White">
        <GRID.ROWDEFINITIONS>
            <ROWDEFINITION Height="40"></ROWDEFINITION>
            <ROWDEFINITION Height="*"></ROWDEFINITION>
        </GRID.ROWDEFINITIONS>
        <STACKPANEL Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Center">
            <BUTTON x:Name="SaveButton" Margin="5" Content="Save Changes"Click="SaveButton_Click"></BUTTON>
            <BUTTON x:Name="RejectButton" Margin="5" Content="Reject Changes"Click="RejectButton_Click"></BUTTON>
            <TEXTBLOCK x:Name="ChangeText" VerticalAlignment="Center" Width="Auto"></TEXTBLOCK>
        </STACKPANEL>
        <DATAC:DATAGRID Name="CustomerGrid" Grid.Row="1"RowEditEnded="CustomerGrid_RowEditEnded"></DATAC:DATAGRID>
    </GRID>



    3. 在MainPage.xaml的后台代码文件中,添加按钮的点击事件处理方法、RowEditEnded事件的处理方法、一个名为OnSubmitCompleted的回调方法,和一个处理行将发生的更改的方法。
     

    ?
    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
    37
    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();
    }



    为要更改的实体设置元数据

    1. 在服务端项目中,为Customer实体手动添加一个名为Customer.metadata.cs的元数据类。
    2. 在元数据类中,对CustomerID和ModifiedData成员属性添加EditableAttribute属性并设置AllowEdit属性为false。我们对成员属性应用EditableAttribute来指定是否想让这个成员属性在客户端让用户编辑。当我们将AllowEdit为false时,这个成员属性在客户端是只读的。在这个例子中,我们只想显示CustomeId和ModifiedDate成员属性而不想用户修改它们。
    3. 添加ExcludeAttribute属性给PasswordHash,PasswordSalt和rowguid成员属性。我们对不想包含客户端生成代码中的成员属性使用ExcludeAttribute。在这个例子中,我们没有必要把PasswordHash,PasswordSalt和rowguid成员属性向客户端公开。
     

    ?
    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
    [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 string PasswordHash;
     
            [Exclude]
            public string PasswordSalt;
     
            [Exclude]
            public Guid rowguid;
     
        }
    }


    4. 用using添加所需的命名空间,例如 System.ComponentModel.DataAnnotations和System.Web.DomainServices.
    5. 运行应用程序。
    注意我们可以在DataGrid中编辑值了。当我们离开所编辑的行时,ChangeText的值将会变为行将发生的更改的描述。当我们点击Save Changes按钮时,数据更改将会保存到数据库中。当点击Reject Changes按钮时,所有的行将发生的更改将恢复原样。

    Powered By D&J (URL:http://www.cnblogs.com/Areas/)
  • 相关阅读:
    Intent
    What should we do next in general after collecting relevant data
    NOTE FOR Secure Friend Discovery in Mobile Social Networks
    missing pcap.h
    after building Android Source code
    plot point(one column)
    When talking to someone else, don't infer that is has been talked with others at first. It may bring repulsion to the person who is talking with you.
    进程基本知识
    Python input和raw_input的区别
    强制 code review:reviewboard+svn 的方案
  • 原文地址:https://www.cnblogs.com/Areas/p/2172189.html
Copyright © 2011-2022 走看看