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/)
  • 相关阅读:
    document.getElementById()使用方法
    Delphi XE7 发布时间
    JavaScript动态更改页面元素
    TCP/IP-协议族----17、应用层简单
    查看员工信息每个部门的最低工资
    VB6.0“挑衅”.NET!
    MapReduce计数器
    Linux学习记录--命名管道通信
    cocos2d-x V3.0 呼叫加速度计 Acceleration
    Linux Kernel(Android) 加密算法汇总(四)-应用程序调用OpenSSL加密演算法
  • 原文地址:https://www.cnblogs.com/Areas/p/2172189.html
Copyright © 2011-2022 走看看