热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> Silverlight>>正文内容

强大的DataGrid组件[14]_数据验证

发布时间:2009年10月14日点击数: 未知

 数据验证是DataGrid应用中的重要一环。正确的数据能保证应用程序的有效。根据微软提供的资料显示,DataGrid是唯一具有自动验证数据能力的数据控件(根据业务对象的属性类型自动做出判断)。然而,这一自动验证所提供的功能仅仅是基本的。在实际应用中,我们往往需要特定格式的数据验证。本文将为大家介绍如何在DataGrid中实施数据验证。

具体步骤
1)建立业务对象
2)为对象中各成员属性通过metadata标签进行数据的验证
3)如果需要进行自定义数据验证,则需另行创建自定义验证类。

几个用于数据验证的metadata的说明
1)[Required]:表示所验证数据必须非空。
2)[RegularExpression]:用正则表达式验证数据。
3)[Range]:对于被验证数据的最值范围进行设定。
4)[CustomValidation]:用于自定义验证数据的设置。

实例
详细的说明在代码中给出。
注意:用VS调试时,要在菜单Debug->Exception...,去掉Common Language Runtime Exception前面的勾,不然会报错。

1)业务类Employees.cs文件:

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;


namespace SilverlightClient
{
    public class Employees: INotifyPropertyChanged
    {
        private int _EmployeeID;
        private string _EmployeeName;
        private int _EmployeeAge;
        private string _EmployeeTelephone;

        [Required(ErrorMessage="该字段为必填!")]
        [CustomValidation(typeof(EmployeeValidation), "IsValidID")]//这里用到了自定义验证,自定义验证类为EmployeeValidation.cs
        public int EmployeeID
        {
            get
            {
                return _EmployeeID;
            }

            set
            {
                if (value != _EmployeeID)
                {
                    _EmployeeID = value;
                    OnPropertyChanged("EmployeeID");
                }

            }

        }


        [Required(ErrorMessage = "该字段为必填!")]
        public string EmployeeName
        {
            get
            {
                return _EmployeeName;
            }

            set
            {
                if (value != _EmployeeName)
                {
                    _EmployeeName = value;
                    OnPropertyChanged("EmployeeName");
                }

            }

        }


        [Required(ErrorMessage = "该字段为必填!")]
        [Range(18,60,ErrorMessage = "输入的年龄范围有误(18-60)!\n请重新填写。")]
        public int EmployeeAge
        {
            get
            {
                return _EmployeeAge;
            }

            set
            {
                if (value != _EmployeeAge)
                {
                    _EmployeeAge = value;
                    OnPropertyChanged("EmployeeAge");
                }

            }

        }


        [Required(ErrorMessage = "该字段为必填!")]
        [RegularExpression(@"^\(\d\d\d\) \d\d\d\d\d\d\d\d$",ErrorMessage = "输入的电话格式不正确!\n请按(###) ########格式匹配输入。")]
        public string EmployeeTelephone
        {
            get
            {
                return _EmployeeTelephone;
            }

            set
            {
                if (value != _EmployeeTelephone)
                {
                    //用VS调试时,要在菜单Debug->Exception...,去掉Common Language Runtime Exception前面的勾,不然会报错。
                    Validator.ValidateProperty(value, new ValidationContext(this,null,null) { MemberName = "EmployeeTelephone" });//跳出提示框显示出错原因
                    _EmployeeTelephone = value;
                    OnPropertyChanged("EmployeeTelephone");
                }

            }

        }


        INotifyPropertyChanged Members
    }

}

 

2)自定义验证类EmployeeValidation.cs文件:

using System.ComponentModel.DataAnnotations;

namespace SilverlightClient
{
    public class EmployeeValidation
    {
        public static ValidationResult IsValidID(int employeeid)
        {
            bool isValid;

            if (employeeid > 0)
                isValid = true;
            else
                isValid = false;

            if (isValid)
            {
                return ValidationResult.Success;
            }

            else
            {
                return new ValidationResult("输入的工号无效!");
            }

        }


    }

}

 

3)MainPage.xaml文件

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="SilverlightClient.MainPage"
    d:DesignWidth="320" d:DesignHeight="240">
    <Grid x:Name="LayoutRoot" Background="White" Width="320" Height="240">
        <data:DataGrid x:Name="dgEmployee" Margin="8" AutoGenerateColumns="False" FontSize="14">
            <data:DataGrid.Columns>
                <data:DataGridTextColumn Header="工号" Binding="{Binding EmployeeID}"/>
                <data:DataGridTextColumn Header="姓名" Binding="{Binding EmployeeName}"/>
                <data:DataGridTextColumn Header="年龄" Binding="{Binding EmployeeAge}"/>
                <data:DataGridTextColumn Header="电话" Binding="{Binding EmployeeTelephone}"/>
            </data:DataGrid.Columns>
        </data:DataGrid>
    </Grid>
</UserControl>

 

4)MainPage.xaml.cs文件

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.Windows.Data;


namespace SilverlightClient
{
    public partial class MainPage : UserControl
    {
        public List GetEmployees()
        {
            List returnedValue = new List();
            returnedValue.Add(new Employees() { EmployeeID = 1, EmployeeName = "张三", EmployeeAge = 23, EmployeeTelephone = "(001) 56891243" });
            returnedValue.Add(new Employees() { EmployeeID = 2, EmployeeName = "李四", EmployeeAge = 24, EmployeeTelephone = "(002) 67453210" });
            returnedValue.Add(new Employees() { EmployeeID = 3, EmployeeName = "王五", EmployeeAge = 25, EmployeeTelephone = "(010) 46782312" });
            returnedValue.Add(new Employees() { EmployeeID = 4, EmployeeName = "赵六", EmployeeAge = 26, EmployeeTelephone = "(011) 78564254" });
            returnedValue.Add(new Employees() { EmployeeID = 5, EmployeeName = "钱七", EmployeeAge = 27, EmployeeTelephone = "(020) 87465676" });
            returnedValue.Add(new Employees() { EmployeeID = 6, EmployeeName = "孙八", EmployeeAge = 28, EmployeeTelephone = "(030) 97321687" });
            return returnedValue;
        }


        public MainPage()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }


        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            dgEmployee.ItemsSource = GetEmployees();
        }

    }

}

最终效果图:

 

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作