您的位置:首页 > 其它

Wcf Ria Services学习笔记(四):WCF RIA Service中的增删改查操作

2010-07-15 10:14 519 查看
本篇以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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: