zoukankan      html  css  js  c++  java
  • Silverlight系列(4) 使用Web Service操作数据库

    4.1 Silverlight中数据验证

    4.1.1 ValidatesOnExceptions异常捕获验证机制

    Silverlight对于双向数据绑定提供了一些基本的数据验证支持,我们可以在set设置器中定义验证规则,并对于不合法数据抛出异常,最后通过捕获验证错误事 件来实现数据的验证。

    Silverlight中如下两种情况下,将会触发验证错误:

    1.在绑定引擎中执行数据转换时抛出异常

    2.在业务实体的set设置器中抛出异常

    BindingValidationError事件

    当数据验证错误出现时,将绑定该错误到数据源;也可以简单的理解为绑定错误到数据源的一个行为。该事件可在控件本身调用,也可在其父控件中调用。例如,在TextBox中,可以声明调用BindingValidationError,或者可以该TextBox的父容器控件Grid,StackPanel中调用BindingValidationError事件。 

    为了保证Validation的灵活性,微软同时提供了相关属性,来控制BindingValidationError事件的调用。NotifyOnValidationError和ValidatesOnExceptions属性。

    为了在验证出错时能够接收到通知,我们必须要在绑定对象上设置如下两个属性为true:

    NotifyOnValidationError属性

    该属性的功能,是当验证错误出现时是否激活BindingValidationError事件;该属性是Silverlight独有的验证属性之一,经常和ValidatesOnExceptions属性配合使用。

    ValidatesOnExceptions属性

    该属性的功能,数据绑定引擎是否捕获显示异常错误作为验证错误。简单的理解,在控件绑定数据时,出现数据源异常抛出,或者数据类型转换时异常抛出,是否作为Validation验证显示在客户端。如果是True,则会按照Validation传统的处理方式,弹出一个红色说明标签,内容是异常错误信息,反之,则不捕获异常作为Validation。

    依然用上一章中得Student类作为示例,在此示例中我们将绑定方式改为TwoWay,同时设置NotifyOnValidationError和ValidatesOnExceptions属性为True,并添加BindingValidationError事件代码如下:

    <TextBox Grid.Column="1" Text="{Binding Name,Mode=TwoWay,NotifyOnValidationError=True,ValidatesOnExceptions=True}"  BindingValidationError="txtName_BindingValidationError" Name="txtName" />

    修改Student类的Name属性如下:

    private string name;

            public string Name

            {

                get { return name; }

                set

                {

                    if (string.IsNullOrEmpty(value))

                    {

                        throw new Exception("用户名不能为空!");

                    }

                    name = value;

                    if (PropertyChanged != null)

                    {

                        PropertyChanged(this, new PropertyChangedEventArgs("Name"));

                    }

                }

            }

    CS代码如下:

    private void txtName_BindingValidationError(object sender, ValidationErrorEventArgs e)

            {

                if (e.Action == ValidationErrorEventAction.Added)

                {

                    MessageBox.Show(e.Error.Exception.Message);

                }

                if (e.Action == ValidationErrorEventAction.Removed)

                {

                }

            }

    说明:

    ValidationErrorEventAction.Added  产生错误

    ValidationErrorEventAction.Removed 移除错误

    4.1.2 Silverlight DataAnnotation验证机制

    请参见MVC课程中相关章节,注释相同,只是用法上有一点差别,需要在Set中加入如下代码:

    Validator.ValidateProperty(value, new ValidationContext(this, null, null) { MemberName = "Name" });

    4.2 使用WebService

    4.2.1 回顾WebService相关知识

    4.2.2 在Silverlight中使用WebServic

    1.       创建WebService

    [WebMethod]

            public List<Student> GetStuList()

            {

                return new List<Student>

                {

                    new Student{ Name="张三",Age=20},

                    new Student{ Name="李四",Age=30}

                };

            }

     

    2.       添加对WebService的引用

    3.       调用WebService方法

    //创建引用对象,注意此处与以前的区别

    StudentService.StuServiceSoapClient stus = new StudentService.StuServiceSoapClient();

    //在Silverlight中调用WebService是异步调用的,在此需要完成调用完成的事件

    stus.GetStuListCompleted += new EventHandler< StudentService.GetStuListCompletedEventArgs>(stus_GetStuListCompleted);

    //调用WebService中提供的方法

        stuxs.GetStuListAsync();

    void stuxs_GetStuListCompleted(object sender, StudentService.GetStuListCompletedEventArgs e)

            {

                List< StudentService.Student> list = new List< StudentService.Student>();

                ObservableCollection< StudentService.Student> ss = e.Result;

                foreach (var s in ss)

                {

                    list.Add(s);

                }

                this.dataGrid1.ItemsSource = list;

            }

     

    转自:http://www.hdaccp.com/new.aspx?id=384

  • 相关阅读:
    JDBC访问数据库的基本步骤是什么?
    Java 为每个原始类型提供了哪些包装类型:
    JDBC访问数据库的基本步骤是什么?
    String 类的常用方法都有那些?
    面向对象三大特性
    三个与取整有关的方法:
    ==和equals方法究竟有什么区别?
    &和&&的区别?
    说一说Servlet的生命周期
    spring框架学习
  • 原文地址:https://www.cnblogs.com/younggun/p/2332521.html
Copyright © 2011-2022 走看看