您的位置:首页 > 数据库

Silverlight系列(4) 使用Web Service操作数据库

2012-01-31 00:07 363 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: