神仙?妖怪?谢谢!

Just do it...

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

演练

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

代码
 1 <grid x:name="LayoutRoot" background="White">  
 2     <grid.rowdefinitions>  
 3         <rowdefinition height="40"></rowdefinition>  
 4         <rowdefinition height="*"></rowdefinition>  
 5     </grid.rowdefinitions>  
 6     <stackpanel horizontalalignment="Center" grid.row="0" orientation="Horizontal">  
 7         <button content="Save Changes" click="SaveButton_Click" margin="5" x:name="SaveButton"></button>  
 8         <button content="Reject Changes" click="RejectButton_Click" margin="5" x:name="RejectButton"></button>  
 9         <textblock x:name="ChangeText" verticalalignment="Center" width="Auto"></textblock>  
10     </stackpanel>  
11     <datac:datagrid grid.row="1" name="CustomerGrid" roweditended="CustomerGrid_RowEditEnded"></datac:datagrid>  
12 </grid>

 

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

代码
 1 private void SaveButton_Click(object sender, RoutedEventArgs e)   
 2 {   
 3     _customerContext.SubmitChanges(OnSubmitCompleted, null);   
 4 }   
 5 private void RejectButton_Click(object sender, RoutedEventArgs e)   
 6 {   
 7     _customerContext.RejectChanges();   
 8     CheckChanges();   
 9 }   
10 private void CustomerGrid_RowEditEnded(object sender, DataGridRowEditEndedEventArgs e)   
11 {   
12     CheckChanges();   
13 }   
14 private void CheckChanges()   
15 {   
16     EntityChangeSet changeSet = _customerContext.EntityContainer.GetChanges();   
17     ChangeText.Text = changeSet.ToString();   
18     bool hasChanges = _customerContext.HasChanges;   
19     SaveButton.IsEnabled = hasChanges;   
20     RejectButton.IsEnabled = hasChanges;   
21 }   
22 private void OnSubmitCompleted(SubmitOperation so)   
23 {   
24     if (so.HasError)   
25     {   
26         MessageBox.Show(string.Format("Submit Failed: {0}", so.Error.Message));   
27         so.MarkErrorAsHandled();   
28     }   
29     CheckChanges();   
30 }

 

 

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

   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 [MetadataTypeAttribute(typeof(Customer.CustomerMetadata))]   
 2 public partial class Customer   
 3 {   
 4     internal sealed class CustomerMetadata   
 5     {   
 6         // Metadata classes are not meant to be instantiated.   
 7         private CustomerMetadata()   
 8         {   
 9         }   
10         [Editable(false)]   
11         public int CustomerID;   
12         [Editable(false)]   
13         public DateTime ModifiedDate;   
14         [Exclude]   
15         public string PasswordHash;   
16         [Exclude]   
17         public string PasswordSalt;   
18         [Exclude]   
19         public Guid rowguid;   
20     }   
21 }

 

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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blackant2/archive/2010/04/08/5462144.aspx

posted on 2010-06-05 02:38  E.Trock  阅读(735)  评论(0编辑  收藏  举报