本篇以DataForm控件,来说明下Wcf Ria Service中的增删改查操作。利用DataForm控件还是比较方便的!以Student实体为例,直接贴代码了,代码里附有一些注释! using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; //添加命名空间 using System.ServiceModel.DomainServices.Client; using ScoreManagement.Web; namespace ScoreManagement { enum ButtonModel { Edit, Add, Cancel } public partial class Test2 : UserControl { ButtonModel buttonModel = ButtonModel.Cancel; DomainService1 client = new DomainService1(); public Test2() { InitializeComponent(); this.Loaded += new RoutedEventHandler(StudentInfoManage_Loaded); } void StudentInfoManage_Loaded(object sender, RoutedEventArgs e) { //把一个entityset绑定到dataform,添加删除按钮均不可用是什么原因 //因为client.Students 是 EntitySet类型的,它并没有实现INotifyCollectionchanged以及iNotifyPropertyChanged接口。 //this.dataForm1.ItemsSource = client.Students; //client.Load(client.GetStudentsQuery()); //所以用如下方法: LoadOperation<Student> lo = client.Load(client.GetStudentsQuery()); lo.Completed += new EventHandler(lo_Completed); } void lo_Completed(object sender, EventArgs e) { dataForm1.CommitButtonContent = "保存"; dataForm1.CancelButtonContent = "取消"; dataForm1.AutoEdit = false; dataForm1.AutoCommit = true; LoadOperation<Student> lo = (LoadOperation<Student>)sender; //这里如果是 this.dataForm1.ItemsSource = lo.Entities,还是不能进行 “添加"和“删除”操作的.一定要ToList()下 dataForm1.ItemsSource = lo.Entities.ToList(); //dataForm1.CurrentItem = lo.Entities.FirstOrDefault(); dataForm1.DeletingItem += new EventHandler<System.ComponentModel.CancelEventArgs>(dataForm1_DeletingItem); dataForm1.EditEnded += new EventHandler<DataFormEditEndedEventArgs>(dataForm1_EditEnded); dataForm1.CommandButtonsVisibility = DataFormCommandButtonsVisibility.All; dataForm1.AddingNewItem+=new EventHandler<DataFormAddingNewItemEventArgs>(dataForm1_AddingNewItem); dataForm1.BeginningEdit += new EventHandler<System.ComponentModel.CancelEventArgs>(dataForm1_BeginningEdit); } //设置编辑模式 void dataForm1_BeginningEdit(object sender, System.ComponentModel.CancelEventArgs e) { buttonModel = ButtonModel.Edit; } //点"+"后的编辑模板,如果是“Commit”操作 void dataForm1_EditEnded(object sender, DataFormEditEndedEventArgs e) { //如果提交 把该项添加到数据库 if (e.EditAction == DataFormEditAction.Commit) { //添加 if (buttonModel == ButtonModel.Add) { Student student = dataForm1.CurrentItem as Student; client.Students.Add(student); client.SubmitChanges(); } //编辑 if (buttonModel == ButtonModel.Edit) { Student student = dataForm1.CurrentItem as Student; client.SubmitChanges(); } } //取消 if (e.EditAction == DataFormEditAction.Cancel) { buttonModel = ButtonModel.Cancel; } } //设置添加模式 void dataForm1_AddingNewItem(object sender, DataFormAddingNewItemEventArgs e) { //设置为添加模式 buttonModel = ButtonModel.Add; } //删除 void dataForm1_DeletingItem(object sender, System.ComponentModel.CancelEventArgs e) { //MessageBoxResult result= MessageBox.Show("你确定要删除该项吗?", "提示", MessageBoxButton.OKCancel); //if (result == MessageBoxResult.OK) //{ // //MessageBox.Show("恭喜你!删除成功!"); //} Student student = dataForm1.CurrentItem as Student; client.Students.Remove(student); client.SubmitChanges(OnSubmitCompleted, null); } //异常处理 public void OnSubmitCompleted(SubmitOperation so) { if (so.Error != null) { string message = so.Error.Message; if (so.EntitiesInError.Any()) { message = string.Empty; Entity entityError = so.EntitiesInError.First(); if (entityError.EntityConflict != null) { EntityConflict confict = entityError.EntityConflict; foreach (string s in confict.PropertyNames) { message += string.Format("Member '{0}' in confict /r/n", s); } } else if(entityError.ValidationErrors.Any()) { foreach (System.ComponentModel.DataAnnotations.ValidationResult vr in entityError.ValidationErrors) { message += string.Format("{0}/r/n",vr.ErrorMessage); } } } MessageBox.Show(message,"操作失败!",MessageBoxButton.OK); } } } }