您的位置:首页 > 其它

WCF RIA 服务 (二十六)-- Silverlight 客户端 7

2013-07-10 10:36 155 查看
演练:编辑来自域服务的数据

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

在这个演练中,我们将学习如何创建一个让用户修改所显示数据的接口,并且将这些修改保存到数据库。

演 练

1. 打开RIAServicesExample项目。(参见
WCF RIA 服务 三)

2. 在MainPage.xaml中,更改界面让用户可以保存或拒绝DataGrid中的更改。下面的XAML添加了一个Save Changes按钮和Reject Changes按钮,以及一个更改文本框。

<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>
<datac:datagrid grid.row="1" name="CustomerGrid" roweditended="CustomerGrid_RowEditEnded"></datac:datagrid>
</grid>


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

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成员属性向客户端公开。

[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按钮时,所有的行将发生的更改将恢复原样。

源代码: http://download.csdn.net/detail/eric_k1m/5730251
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: