上一篇,我们讨论了,捕获用户提交数据验证。本篇将集中讨论DatagrID和Dataform两个数据控件的数据验证方法,其中,我们会附加介绍一个新的验证控件ValIDationSummary。
概述
DatagrID和Dataform是Silverlight中最常用的两个数据控件,其主要目的是作为数据集合的载体控件。这两个控件不仅支持自动数据绑定,而且允许用户添加许多自定义行为 *** 作,例如编辑,排序,删除,添加等。而在日常项目开发中,经常会碰到用户在编辑,或者添加时对数据的验证判断,在数据commit前,即捕获数据异常并返回提示信息到客户端。
ValIDationSummary控件
在DatagrID和Dataform数据验证中,最为常用的是ValidationSummary控件,该控件和WebForm中的ValIDationSummary控件类似,其功能都是将错误信息集合显示在一个ListBox控件中。简单的说,ValIDationSummary控件是一个能够容纳验证错误集合的容器,能够检测和显示当前页面所有验证结果到客户端。
命名控件:System.windows.Controls
装配:System.windows.Controls.Data.input (位于 System.windows.Controls,Data.input.dll)
我们仍旧使用上一篇的源代码项目,SilverlightValIDationDemo,简单修改代码如下:
首先需要添加新的命名空间引用,
然后添加ValIDationSummary控件,即可
其运行结果如下:
这样就一个ValIDationSummary使用实例。细心的朋友可能已经发现,上图,一共出现了八处验证错误提示,而在ValIDationSummary中,仅显示了四个。这里需要对此进行简单的说明,
1. 如果使用ValIDationSummary控件捕获验证错误,必须将Mode设置为Twoway;
2. 如果使用ValIDationSummary控件捕获验证错误,必须将ValIDatesOnExceptions设置为True;
3. 如果使用ValIDationSummary控件捕获验证错误,必须将NotifyOnValIDationError设置为True;
在我们原有的代码中,都没有满足以上条件,所以ValIDationSummary忽略其验证错误信息。参考代码如下:
< StackPanel OrIEntation ="Horizontal" margin ="5" >
< TextBlock Text ="邮 件: " VerticalAlignment ="Center" />
< TextBox x:name ="txtEmail" WIDth ="200" DataContext =" {Binding Source={StaticResource UserDataContext}} " Text =" {Binding Path=email, Mode=TwoWay, ValIDatesOnNotifyDataErrors=False, NotifyOnValIDationError=True, ValIDatesOnExceptions=True} " />
</ StackPanel >
< StackPanel OrIEntation ="Horizontal" margin ="5" >
< TextBlock Text ="地 址: " VerticalAlignment ="Center" />
< TextBox x:name ="txtAddress" WIDth ="200" DataContext =" {Binding Source={StaticResource UserDataContext}} " Text =" {Binding Path=address, ValIDatesOnDataErrors=True, NotifyOnValIDationError=False, ValIDatesOnExceptions=True} " />
</ StackPanel >
< StackPanel OrIEntation ="Horizontal" margin ="5" >
< TextBlock Text ="电 话: " VerticalAlignment ="Center" />
< TextBox x:name ="txtPhone" WIDth ="200" DataContext =" {Binding Source={StaticResource UserDataContext}} " Text =" {Binding Path=phone, ValIDatesOnExceptions=True} " />
</ StackPanel >
< StackPanel OrIEntation ="Horizontal" margin ="5" >
< TextBlock Text ="成绩等级: " VerticalAlignment ="Center" />
< TextBox x:name ="txtGradeLevel" WIDth ="200" DataContext =" {Binding Source={StaticResource UserDataContext}} " Text =" {Binding Path=gradelevel, ValIDatesOnExceptions=True} " />
</ StackPanel >
< StackPanel OrIEntation ="Horizontal" margin ="5" >
< TextBlock Text ="成绩范围: " VerticalAlignment ="Center" />
< TextBox x:name ="txtGradeRange" WIDth ="200" DataContext =" {Binding Source={StaticResource UserDataContext}} " Text =" {Binding Path=graderange, ValIDatesOnExceptions=True} " />
</ StackPanel >
ValIDationSummary控件,提供了许多属性,允许开发人员自定义其调用,例如,如果不想让ValIDationSummary控件捕获显示Username用户名验证错误,只需在代码中添加,datainput:ValIDationSummary.ShowErrorsInSummary = “False”,就可以了。
< StackPanel OrIEntation ="Horizontal" margin ="5" x:name ="spUsername" >
< TextBlock Text ="用户名: " VerticalAlignment ="Center" />
< TextBox x:name ="txtUsername" WIDth ="200" DataContext =" {Binding Source={StaticResource UserDataContext}} " Text =" {Binding Path=name, ValIDatesOnExceptions=True,UpdateSourceTrigger=Explicit} " datainput:ValIDationSummary.ShowErrorsInSummary = "False" />
</ StackPanel >
在明白了ValIDationSummary控件的使用后,我们来看看DatagrID数据验证的使用。
DatagrID数据验证
DatagrID控件的主要功能是将数据集合使用表格的方式展示到客户端。该控件支持大量的属性和事件,允许用户对数据集合进行 *** 作,例如修改数据,添加数据,删除等 *** 作。在这些 *** 作中,数据验证也是最常用的功能之一。为了演示该实例,我们将添加一个简单的数据集合和一个DatagrID控件,并将该数据集合绑定到DatagrID控件,
在User数据成员类中,定义一个新的构造函数:
public User( string strname, string strpwd, int iage, string stremail)
{
name = strname;
password = strpwd;
Age = iage;
email = stremail;
}
在MainPage中,添加新的命名空间引用:
xmlns:data="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Data"
然后,添加一个datagrID控件,
< data:DataGrID x:name ="dgValIDationDemo"
autoGenerateColumns ="False"
margin ="10" WIDth ="350"
HorizontalAlignment ="left"
>
< data:DataGrID.Columns >
< data:DataGrIDTextColumn header ="用户名" Binding =" {Binding name,Mode=TwoWay} " />
< data:DataGrIDTextColumn header ="密码" Binding =" {Binding password,Mode=TwoWay} " />
< data:DataGrIDTextColumn header ="年龄" Binding =" {Binding Age,Mode=TwoWay} " />
< data:DataGrIDTextColumn header ="电子邮件" Binding =" {Binding email,Mode=TwoWay} " />
</ data:DataGrID.Columns >
</ data:DataGrID >
在MainPage后台代码中,添加数据集合初始化代码:
private List < User > InitCollection()
{
List < User > tmpuserCollection = new List < User > ();
tmpuserCollection.Add( new User( " jv9 " , " 123456 " , 99 , " qq34506@hotmail.com " ));
tmpuserCollection.Add( new User( " 冷秋寒 " , " 654321 " , 88 , " admin@hotmail.com " ));
tmpuserCollection.Add( new User( " Silverlight " , " 666666 " , 77 , " silverlight@hotmail.com " ));
tmpuserCollection.Add( new User( " 银光中国 " , " 888888 " , 66 , " admin@silverlightchina.net " ));
return tmpuserCollection;
}
然后在MainPage页面构造函数中,进行数据绑定:
dgValIDationDemo.ItemsSource = InitCollection();
运行即可看到如下图:
Silverlight DatagrID的数据验证大体可分为两种:单元格数据验证和数据行验证;下面我们使用实例演示讲解着两种验证方法,
1. 单元格数据验证
单元格数据验证,顾名思义,是对DatagrID中的某一个单元格进行ValIDation。
这种验证可以基于前几篇中的四种验证机制对数据进行判断,最为常用的验证机制方式为:基本异常验证和DataAnnotation验证机制。
2. 行数据验证
行数据验证,其功能性和单元格数据验证相同,而其验证作用范围是被验证数据整行。当行数据验证出现错误时,则会在DatagrID底部显示一个ListBox显示其错误信息,其样式和ValIDationSummary相似,点击ListBox错误信息,即可跳入验证出错行。
这时会发现,出现验证错误整行背景成为粉红色,而出错的单元格,不再显示红框验证错误提示,其错误信息被显示在DatagrID底部。
行数据验证和单元格数据验证最大的不同,是其锁定的范围不同。当使用行数据验证时,尽管当前单元格验证有错误,用户仍旧可以继续修改该行中其他数据单元格,其焦点被锁定在整行;而单元个验证,则被锁定在某一个单元格,数据验证报错,用户无法切换焦点,必须纠正验证错误后,才能继续下一步 *** 作。
DataForm数据验证
DataForm数据控件是Silverlight 3 Toolkit中推出的数据处理表格控件。该控件可将数据集合成员显示到客户端。其中自带添加,修改,删除等内建功能。
由于使用该控件需要对数据集合成员进行绑定,每次绑定就已经将ValIDation验证框架应用Dataform中,每当验证错误出现时,DataForm控件将自动捕获验证错误,并显示在客户端。
使用该控件需要添加以下命名空间引用:
xmlns:dataform="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Data.DataForm.Toolkit"
我们在MainPage中,添加DataForm控件代码
< dataform:DataForm x:name ="dfDetail"
margin ="10" WIDth ="350" Height ="300"
HorizontalAlignment ="left"
autoGenerateFIElds ="False"
ItemsSource =" {Binding} " >
< dataform:DataForm.EditTemplate >
< DataTemplate >
< StackPanel >
< dataform:datafield >
< StackPanel OrIEntation ="Horizontal" >
< TextBlock Text ="用户名: " VerticalAlignment ="Center" />
< TextBox Text =" {Binding name, ValIDatesOnDataErrors=True} " VerticalAlignment ="Center" WIDth ="100" />
</ StackPanel >
</ dataform:datafield >
< dataform:datafield >
< StackPanel OrIEntation ="Horizontal" >
< TextBlock Text ="密码: " VerticalAlignment ="Center" />
< TextBox Text =" {Binding password, ValIDatesOnDataErrors=True} " VerticalAlignment ="Center" WIDth ="100" />
</ StackPanel >
</ dataform:datafield >
< dataform:datafield >
< StackPanel OrIEntation ="Horizontal" >
< TextBlock Text ="年龄: " VerticalAlignment ="Center" />
< TextBox Text =" {Binding Age, ValIDatesOnDataErrors=True} " VerticalAlignment ="Center" WIDth ="100" />
</ StackPanel >
</ dataform:datafield >
< dataform:datafield >
< StackPanel OrIEntation ="Horizontal" >
< TextBlock Text ="电子邮件: " VerticalAlignment ="Center" />
< TextBox Text =" {Binding email, ValIDatesOnDataErrors=True} " VerticalAlignment ="Center" WIDth ="100" />
</ StackPanel >
</ dataform:datafield >
</ StackPanel >
</ DataTemplate >
</ dataform:DataForm.EditTemplate >
</ dataform:DataForm >
在DataForm中,我们对已知数据成员进行绑定设置。下面需要简单修改Mainpage后台代码,将数据集合绑定到DataForm:
public MainPage()
{
InitializeComponent();
// dgValIDationDemo.ItemsSource = InitCollection();
PagedCollectionVIEw pcv = new PagedCollectionVIEw(InitCollection());
spDataCollection.DataContext = pcv;
}
这里我们使用了PagedCollectionView 类,将原有的List<User>转换为PagedCollectionVIEw ,将其绑定到spDataCollection布局控件的DataContext,从而实现该布局下所有数据控件ItemsSource共同绑定同一个数据源。当DatagrID选择项被修改时,DataForm当前项也同时修改。
这时,我们可以对DataForm进行简单的验证测试:
当我们点击添加一行新数据时,保持所有TextBox为空,点击submit,则会看到Dataform返回的验证错误信息提示:
@L_301_10@
这时,数据集合已经被锁定,无论是DatagrID还是Dataform都无法做任何数据 *** 作。
以上可以看出,对于Dataform的数据验证,开发人员无需进行过多的干涉,ValIDation验证框架会自动接管其验证进程。
Ok,今天的内容就讲到这里,希望大家能有所收获。
源代码第一部分下载
源代码第二部分下载
欢迎大家加入“专注Silverlight”QQ技术群,目前,1-6群都已经满员,新开500人七群,欢迎大家加入一起学习讨论Silverlight&WPF开发技术。 22308706(一群) 超级群500人满 37891947(二群) 超级群500人满 100844510(三群) 高级群200人满 32679922(四群) 超级群500人满 23413513(五群) 高级群200人满 32679955(六群) 超级群500人满 61267622(七群 推荐) 超级群500人未满
总结以上是内存溢出为你收集整理的Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary全部内容,希望文章能够帮你解决Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)