演练:编辑来自域服务的数据
当我们在域服务中添加了更新、插入或删除方法时,我们就可以在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按钮时,所有的行将发生的更改将恢复原样。
838

被折叠的 条评论
为什么被折叠?



