本篇以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);
            }
        }
    }
}

 

 

 

posted on 2013-04-11 17:17  裴银祥的博客园  阅读(219)  评论(0)    收藏  举报