如何将DropDownList中的内容转换成asp 字符串转换成数字 C# ASP.net

c#教程之ASP.Net控件数据绑定和数据验证控件
来源:未知
10.1& ASP.Net控件数据绑定
所谓数据绑定技术就是把数据集的某个或者某些数据绑定到控件的某些属性上面的一种技术。说的具体些,就是把数据集中某个或者某些数据绑定到Text控件、ListBox控件、ComBox等控件上的能够显示数据的属性上面。当对控件完成数据绑定后,其显示的内容将随着数据集的变化而变化。
10.2.1&& 数据绑定基础
ASP.NET引入了新的数据绑定语法。这种非常灵活的语法允许开发人员不仅可以绑定到数据源,而且可以绑定到简单属性、集合、表达式甚至是从方法调用返回的结果。
DataBind是页和所有服务器控件的方法。当需要更新被绑定的数据时,必须调用此方法。当在父控件上调用DataBind时,该控件的所有子控件也同时调用自己的DataBind方法。例如,当调用DataList1.DataBind()后,将对DataList模板中的每一控件调用DataBind方法。在调用页的DataBind方法,既Page.DataBind(),会导致调用页上的所有控件的DataBind方法,更新页上所有绑定数据。通常从Page_Load事件调用DataBind,如下例所示。
protected void Page_Load(Object Src, EventArgs E) {
DataBind();}
下面的示例说明如何将一个服务器控件的属性绑定到另一个服务器控件的属性。
&&& &script language=&C#& runat=&server&&
&&&&&&& void SubmitBtn_Click(Object sender, EventArgs e) {
&&&&&&&&& Page.DataBind();//更新页内的所有被绑定的数据
&&& &/script&
&&& &h3&&font face=&宋体&&一个服务器控件的属性绑定到另一个服务器控件的属性&/font&&/h3&
&&& &form runat=server&
&&&&&&& &asp:DropDownList id=&StateList& runat=&server&&
&&&&&&&&& &asp:ListItem&苹果&/asp:ListItem&
&&&&&&&&& &asp:ListItem&香蕉&/asp:ListItem&
&&&&&&&&& &asp:ListItem&桔子&/asp:ListItem&
&&&&&&& &/asp:DropDownList&
&&&&&&& &asp:button Text=&提交& OnClick=&SubmitBtn_Click& runat=server/&
&&&&&&& &p&
&&&&&&& 选定的水果:&asp:label text='&%# StateList.SelectedItem.Text %&' runat=server/&
&&& &/form&
网页中语句text='&%# StateList.SelectedItem.Text %&'是将Label控件的Text属性绑定到DropDownList控件的属性StateList.SelectedItem.Text。符号%#表示数据绑定。函数SubmitBtn_Click中的语句Page.DataBind()更新页内的所有被绑定的数据。如果使用Visual Studio.Net实现,具体步骤如下:
(1)创建一个Web应用程序框架,选择菜单命令建立一个新空白窗体。
(2)放工具箱的DrowDownList控件到窗体。单击属性Items后的按钮,出现选择ListItem集合编辑器对话框,单击添加按钮,增加三项。修改每项的属性Text,分别为:课程总论、刚体静力学、弹性静力学。
(3)& 放工具箱的Button控件到窗体,为单击确定按钮事件(Click)函数增加语句(双击Click事件):
private void Button1_Click(object sender, System.EventArgs e)
&&&&&&&& {
&&&&&&&& Page.DataBind();
&&&&&&&& }
(4)放Label控件到窗体,id为Label1。单击属性DataBinding后标题为&的按钮,打开Label1数据绑定对话框,选择自定义绑定表达式(c),在其下编辑框中输入:DropDownList1.SelectedItem.Text。单击确定按钮。
10.2.2&&&&&&& 基于变量的数据绑定
ASP.NET 数据绑定语法支持绑定到公共变量、页的属性和页上其他控件的属性。下面的示例说明如何绑定到公共变量和页上的简单属性。注意这些值在DataBind()调用前初始化。
&&& &script language=&C#& runat=&server&&
&&&&&&& void Page_Load(Object sender, EventArgs e) {
&&&&&&&&&&& Page.DataBind();
&&&&&&& string custID{//属性
&&&&&&&&&&& get {
&&&&&&&&&&&&&&& return &ALFKI&;
&&&&&&&&&&& }
&&&&&&& int orderCount{
&&&&&&&&&&& get {
&&&&&&&&&&&&&&& return 11;
&&&&&&&&&&& }
&&& &/script&
&&& &h3&&font face=&宋体&&到页属性的数据绑定&/font&&/h3&
&&& &form runat=server&
&&&&&&& 客户:&b&&%# custID %&&/b&&br&
&&&&&&& 未结的订单:&b&&%# orderCount %&&/b&
&&& &/form&
用Visual Studio.Net实现的方法见上例及书。
10.2.3&&& 基于集合的绑定
像DataGrid、ListBox、DrowDownList和HTMLSelect这样的列表服务器控件的列表都可以绑定到数据源。例如绑定到公共语言运行库的集合类型,如ArrayList、DataView、Hashtable和DataReader等。下面的示例说明如何将DrowDownList的列表绑定到ArrayList。
&&& &script language=&C#& runat=&server&&
&&&&&&& void Page_Load(Object Sender, EventArgs E) {
&&&&&&&&&&& if (!Page.IsPostBack) {
&&&&&&&&&&&&&& ArrayList values = new ArrayList();
&&&&&&&&&&&&&& values.Add (&IN&);
&&&&&&&&&&&&&& values.Add (&KS&);
&&&&&&&&&&&&&& values.Add (&MD&);
&&&&&&&&&&&&&& values.Add (&MI&);
&&&&&&&&&&&&&& values.Add (&OR&);
&&&&&&&&&&&&&& values.Add (&TN&);
&&&&&&&&&&&&&& DropDown1.DataSource =
&&&&&&&&&&&&&& DropDown1.DataBind();
&&&&&&&&&&& }
&&&&&&& void SubmitBtn_Click(Object sender, EventArgs e) {
&&&&&&&&&& Label1.Text = &您选择了:& + DropDown1.SelectedItem.T
&&& &/script&
&&& &h3&&font face=&宋体&&数据绑定 DropDownList&/font&&/h3&
&&& &form runat=server&
&&&&& &asp:DropDownList id=&DropDown1& runat=&server& /&
&&&&& &asp:button Text=&提交& OnClick=&SubmitBtn_Click& runat=server/&
&&&&& &asp:Label id=Label1 font-name=&宋体& font-size=&10.5pt& runat=&server& /&
&&& &/form&
下面的示例说明如何把数据表绑定到DataGrid。注意使用DataView类要引用命名空间System.Data,即语句&%@ Import namespace=&System.Data& %&。具体例子如下:
&%@ Import namespace=&System.Data& %&
&script language=&C#& runat=&server&&
& void Page_Load(Object sender, EventArgs e ) {
&& if (!Page.IsPostBack) {
&&&& DataTable dt = new DataTable();//建立一个数据表
&&&& DataR//建立一个数据表的记录变量
&&&& dt.Columns.Add(new DataColumn(&整数值&, typeof(Int32)));//增加字段
&&&& dt.Columns.Add(new DataColumn(&字符串值&, typeof(string)));//包括字段名
&&&& dt.Columns.Add(new DataColumn(&日期时间值&, typeof(DateTime)));//及字段类型
&&&& dt.Columns.Add(new DataColumn(&布尔值&, typeof(bool)));
&&&& for (int i = 1; i &= 9; i++) {//增加10个记录
&&&&&&& dr = dt.NewRow();//建立1个记录对象
&&&&&&& dr[0] =//为记录的每个字段赋值
&&&&&&& dr[1] = &项 & + i.ToString();
&&&&&&& dr[2] = DateTime.N
&&&&&&& dr[3] = (i % 2 != 0) ? true :
&&&&&&& dt.Rows.Add(dr);//把此记录加到数据表中
&&&&&& dataGrid1.DataSource = new DataView(dt);//为dataGrid指定数据源
&&&&&& dataGrid1.DataBind();//数据更新
& &/script&
&&& &h3&&font face=&宋体&&到 DataView 的数据绑定&/font&&/h3&
&&& &form runat=server&
&&&&&&& &asp:DataGrid id=&dataGrid1& runat=&server&
&&&&&&&&& BorderColor=&black&
&&&&&&&&& BorderWidth=&1&
&&&&&&&&& GridLines=&Both&
&&&&&&&&& CellPadding=&3&
&&&&&&&&& CellSpacing=&0&
&&&&&&&&& HeaderStyle-BackColor=&#aaaadd&
&&&&&&& /&
&&& &/form&
下面的示例说明如何绑定到Hashtable。
&&& &script language=&C#& runat=&server&&
&&&&&&&void Page_Load(Object sender, EventArgs e) {
&&&&&&&&&&& if (!Page.IsPostBack) {
&&&&&&&&&&&&&&& Hashtable h = new Hashtable();//注意哈希表的使用
&&&&&&&&&&&&&&& h.Add (&键 1&, &值 1&);//哈希表的每一个元素是一对键和值
&&&&&&&&&&&&&&& h.Add (&键 2&, &值 2&);
&&&&&&&&&&&&&&& h.Add (&键 3&, &值 3&);
&&&&&&&&&&&&&&& MyDataList.DataSource=h;//为列表框指定数据源
&&&&&&&&&&&&&&& MyDataList.DataBind();//数据更新
&&&&&&&&&&& }
&&& &/script&
&&& &h3&&font face=&宋体&&到哈希表的数据绑定&/font&&/h3&
&&& &form runat=server&
&&&&&&& &asp:DataList id=&MyDataList& runat=&server&
&&&&&&&&& BorderColor=&black&
&&&&&&&&& BorderWidth=&1&
&&&&&&&&& GridLines=&Both&
&&&&&&&&& CellPadding=&4&
&&&&&&&&& CellSpacing=&0&
&&&&&&&&& &
&&&&&&&&&&& &ItemTemplate&
&&&&&&&&&&&&&&& &%# ((DictionaryEntry)Container.DataItem).Key %& :
&&&&&&&&&&&&&&& &%# ((DictionaryEntry)Container.DataItem).Value %&
&&&&&&&&&&& &/ItemTemplate&
&&&&&&& &/asp:DataList&
&&& &/form&
标记&ItemTemplate&指定显示格式&/ItemTemplate&是按指定显示格式重复显示数据源中的所有数据。本例中应显示3组数据,指定显示格式为:键1:值。
下面介绍如何将ListBox、DrowDownList和HTMLSelect这样的列表服务器控件的列表绑定到数据表的某一字段上。
&%@ Import namespace=&System.Data& %&
&script language=&C#& runat=&server&&
& void Page_Load(Object sender, EventArgs e ) {
&& if (!Page.IsPostBack) {
&&&& DataTable dt = new DataTable();//建立一个数据表
&&&& DataR//建立一个数据表的记录变量
&&&& dt.Columns.Add(new DataColumn(&Itemid&, typeof(Int32)));//增加字段
&&&& dt.Columns.Add(new DataColumn(&ItemName&, typeof(string)));//包括字段名
&&&& dt.Columns.Add(new DataColumn(&ItemDate&, typeof(DateTime)));//及字段类型
&&&& dt.Columns.Add(new DataColumn(&ItemBool&, typeof(bool)));
&&&& for (int i = 1; i &= 9; i++) {//增加10个记录
&&&&&&& dr = dt.NewRow();//建立1个记录对象
&&&&&&& dr[0] =//为记录的每个字段赋值
&&&&&&& dr[1] = &项 & + i.ToString();
&&&&&&& dr[2] = DateTime.N
&&&&&&& dr[3] = (i % 2 != 0) ? true :
&&&&&&& dt.Rows.Add(dr);//把此记录加到数据表中
&&&&&& StateList.DataSource = new DataView(dt);//为DropDownList指定数据源
&&&&&& StateList.DataTextField=&ItemName&;
&&&&&& StateList.DataValueField=&Itemid&;
&&&&&& StateList.DataBind();//数据更新
&& void SubmitBtn_Click(Object sender, EventArgs e) {
&&& Label1.Text=&StateList的Text=&+StateList.SelectedItem.Text+&:StateList的Value=&+StateList.SelectedItem.V
& &/script&
&&& &h3&&font face=&宋体&&到StateList的数据绑定&/font&&/h3&
&&& &form runat=server&
&&&&&&& &asp:DropDownList id=&StateList& runat=&server&/&
&&&&&&&& &asp:button Text=&提交& OnClick=&SubmitBtn_Click& runat=server/&
&&&&&&&& &br&
&&&&&&& &asp:Label id=&Label1& runat=&server&/&
&&& &/form&
10.2.4&& 基于表达式绑定
通常需要在绑定到页或控件之前操作数据。下面的示例说明如何绑定到表达式和方法的返回值。
&&& &script language=&C#& runat=&server&&
&&&&&&& void Page_Load(Object Src, EventArgs E) {
&&&&&&&&&&& if (!Page.IsPostBack) {
&&&&&&&&&&&&&& ArrayList values = new ArrayList();
&&&&&&&&&&&&& &values.Add (0);
&&&&&&&&&&&&&& values.Add (1);
&&&&&&&&&&&&&& values.Add (2);
&&&&&&&&&&&&&& values.Add (3);
&&&&&&&&&&&&&& values.Add (4);
&&&&&&&&&&&&&& values.Add (5);
&&&&&&&&&&&&&& values.Add (6);
&&&&&&&&&&&&&& DataList1.DataSource =
&&&&&& &&&&&&&&DataList1.DataBind();
&&&&&&&&&&& }
&&&&&&& String EvenOrOdd(int number) {
&&&&&&&&&&& if ((number % 2) == 0)
&&&&&&&&&&&&& return &偶数&;
&&&&&&&&&&& else
&&&&&&&&&&&&& return &奇数&;
&&& &/script&
& &h3&&font face=&宋体&&到方法和表达式的数据绑定&/font&&/h3&
& &form runat=server&
&&& &asp:DataList id=&DataList1& runat=&server&
&&&&& BorderColor=&black&
&&&&& BorderWidth=&1&
&&&&& GridLines=&Both&
&&&&& CellPadding=&3&
&&&&& CellSpacing=&0&
&&&&& &ItemTemplate&
&&&&&& 数字值:&%# Container.DataItem %&&%--Container表示数据源--%&
&&&&&& 偶/奇:&%# EvenOrOdd((int) Container.DataItem) %&&%--绑定到函数返回值--%&
&&&&& &/ItemTemplate&
&&& &/asp:datalist&
10.2.5基于DataBinder.Eval方法的数据绑定
为将绑定的数据按指定数据类型转化为字符串,可以使用String.Format方法。请看下面的示例,该例要将数据表中字段名为&IntegerValue&的数据转换为货币的数据类型的字符串输出。
&%# String.Format(&{0:c}&,((DataRowView)Container.DataItem)[&IntegerValue&])%&
该语法可能比较复杂,难以记忆。ASP.NET提供了一种静态方法DataBinder.Eval,可以将绑定的数据按指定数据类型转化为字符串。该方法使用很方便,因为它消除了开发人员为强迫将数值转换为所需的数据类型而必须做的许多显式转换。这在数据绑定模板列表内的控件时尤其有用,因为通常数据字段的类型都必须转换。为将整数显示为货币字符串,使用#DataBinder.Eval格式如下:
&%#DataBinder.Eval(Container.DataItem, &IntegerValue&, &{0:c}&) %&
DataBinder.Eval是一个具有三个参数的方法,第一个参数是数据源的当前记录,在象DataList、DataGrid或Repeater这样的模板列表中,该参数始终是Container.DataItem,第二个参数是数据表字段名,表示要将此字段的数据转换为第三个参数指定的数据类型的字符串,第三个参数为格式字符串,{0:c}表示货币类型。格式字符串参数是可选的。如果省略它,则 DataBinder.Eval将此字段的数据转换为字段本身的数据类型的字符串,如下例所示,输出为字符串&true&或&false&。
&%# (bool)DataBinder.Eval(Container.DataItem, &BoolValue&) %&
具体的实例如下:
&%@ Import namespace=&System.Data& %&
&&&&script language=&C#& runat=&server&&
&&&&&&& void Page_Load(Object sender, EventArgs e) {
&&&&&&&&&&& if (!Page.IsPostBack) {
&&&&&&&&&&&&&&& DataTable dt = new DataTable();
&&&&&&&&&&&&&&& DataR
&&&&&&&&&&&&&&& dt.Columns.Add(new DataColumn(&IntegerValue&, typeof(Int32)));
&&&&&&&&&&&&&&& dt.Columns.Add(new DataColumn(&StringValue&, typeof(string)));
&&&&&&&&&&&&&&& dt.Columns.Add(new DataColumn(&DateTimeValue&, typeof(DateTime)));
&&&&&&&&&&&&&&& dt.Columns.Add(new DataColumn(&BoolValue&, typeof(bool)));
&&&&&&&&&&&&&&& for (int i = 0; i & 9; i++) {
&&&&&&&&&&&&&&&&&&& dr = dt.NewRow();
&&&&&&&&&&&&&&&&&&& dr[0] =
&&&&&&&&&&&&&&&&&&& dr[1] = &项 & + i.ToString();
&&&&&&&&&&&&&&&&&&& dr[2] = DateTime.N
&&&&&&&&&&&&&&&&&&& dr[3] = (i % 2 != 0) ? true :
&&&&&&&&&&&&&&&&&&& dt.Rows.Add(dr);
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& dataList1.DataSource = new DataView(dt);
&&&&&&&&&&&&&&& dataList1.DataBind();
&&&&&&&&&&& }
&&& &/script&
&&& &h3&&font face=&宋体&&使用 DataBinder.Eval 进行数据绑定&/font&&/h3&
&&& &form runat=server&
&&&&& &&&asp:DataList id=&dataList1& runat=&server&
&&&&&&&&& RepeatColumns=&3&
&&&&&&&&& Width=&80%&
&&&&&&&&& BorderColor=&black&
&&&&&&&&& BorderWidth=&1&
&&&&&&&&& GridLines=&Both&
&&&&&&&&& CellPadding=&4&
&&&&&&&&& CellSpacing=&0&
&&&&&&&&& &
&&&&&&&&&&& &ItemTemplate&
&&&&&&&&&&&&&&& 订购日期:&%# DataBinder.Eval(Container.DataItem, &DateTimeValue&, &{0:d}&) %&
&&&&&&&&&&&&&&& &p&
&&&&&&&&&&&&&& &数量:&%# DataBinder.Eval(Container.DataItem, &IntegerValue&, &{0:N2}&) %&
&&&&&&&&&&&&&&& &p&
&&&&&&&&&&&&&&& 项:&%# DataBinder.Eval(Container.DataItem, &StringValue&) %&
&&&&&&&&&&&&&&& 订购日期: &asp:CheckBox id=chk1 Checked='&%# (bool)DataBinder.Eval(Container.DataItem, &BoolValue&) %&' runat=server/&
&&&&&&&&&&&&&&& &p&
&&&&&&&&&&& &/ItemTemplate&
&&&&&&& &/asp:Datalist&
&&& &/form&
控件DataList中的ItemTemplate是模板控件,其功能是将控件DataList的数据源中的所有数据,按ItemTemplate模板控件所指定的格式显示。
10.2.6列表绑定控件
列表绑定控件通用属性
1. DataSource 属性
DataList、DataGraid和Repeater都提供了DataSource属性。使用DataSource属性指定要绑定到上述三种数据列表控件的数据源,用数据源中的数据填充上述三种数据列表控件。数据源必须是实现System.Collections.ICollection接口的具有相同对象的集合,例如System.Data.DataView(见6.3节最后例子)、System.Collections.ArrayList(见6.3节例1)和System.Collections.Hashtable(见6.3节哈希表例子)。
2. Items 集合
Items是一个集合属性,包含一些具有相同特征的若干对象的集合。DataList、DataGraid和Repeater控件中包含多个Items集合属性,使用Items集合用来以编程的方式控制DataList、DataGraid和Repeater控件中的各项。例如:
a)&& AlternatingItem:DataGraid中所有奇数编号行的项的集合
b)&& SelectedItem:当前选中的所有项的集合。
c)&& EditItem:正在编辑的行中所有项的集合。例子见7.2.4 更新数据的语句MyDataGrid.EditItemIndex = (int)E.Item.ItemI。
以上各项都和数据源有关,以下各项和数据源无关。
d)&& Header:所有列表表头项的集合
e)&& Footer: 所有列表表尾项的集合
f)&& Separtor:DataGraid和Repeater控件中分隔符线的集合
g)&& Page:DataGraid在分页显示中,每页数据项的集合。
3.数据绑定和Items集合的创建
当为DataList、DataGraid和Repeater等列表控件的属性DataSource指定数据源,并执行数据绑定函数DataBind方法后,列表控件将创建Items集合,并从数据源取得显示所需的数据,可以通过Items属性来获得列表控件中各项的内容。注意,只有绑定到数据源的项才包含在Items集合中。页眉、页脚和分隔符不包含在该集合中。下面的示例展示如何使用 Items集合来显示DataList控件中的项。
&%@ Import Namespace=&System.Data& %&
&& &script language = &C#& runat=&server&&
&&&&& ICollection CreateDataSource()
&&&&&&&& DataTable dt = new DataTable();
&&&&&&&& DataR
&&&&&&&& dt.Columns.Add(new DataColumn(&StringValue&, typeof(string)));
&&&&&&&& for (int i = 0; i & 10; i++)
&&&&&&&&&{
&&&&&&&&&&& dr = dt.NewRow();
&&&&&&&&&&& dr[0] = &Item & + i.ToString();
&&&&&&&&&&& dt.Rows.Add(dr);
&&&&&&&& }
&&&&&&&& DataView dv = new DataView(dt);
&&&&& void Page_Load(Object sender, EventArgs e)
&&&&&&&& if (!IsPostBack)
&&&&&&&&&{
&&&&&&&&&&& DataList1.DataSource = CreateDataSource();//指定数据源
&&&&&&&&&&& DataList1.DataBind();//数据绑定
&&&&&&&& }
&&&&& void Button_Click(Object sender, EventArgs e)
&&&&&&&&&if (DataList1.Items.Count&0)//Items项数&0
&&&&&&&& {
&&&&&&&&&&& Label1.Text = &The Items collection contains: &br&&;
&&&&&&&&&&& foreach(DataListItem item in DataList1.Items)
&&&&&&&&&&& {
&&&&&&&&&&&&&&&Label1.Text += ((DataBoundLiteralControl)item.Controls[0]).Text +
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&br&&;
&&&&&&&&&&& }
&&&&&&&& }
&&&&/script&
&&&&form runat=server&
&&&&& &h3&DataList Items Example&/h3&
&&&&&&&asp:DataList id=&DataList1& runat=&server&
&&&&&&&&&& BorderColor=&black&
&&&&&&&&&& CellPadding=&3&
&&&&&&&&&& Font-Name=&Verdana&
&&&&&&&&&& Font-Size=&8pt&&
&&&&&&&& &HeaderStyle BackColor=&#aaaadd&&
&&&&&&&&&/HeaderStyle&
&&&&&&&& &AlternatingItemStyle BackColor=&Gainsboro&&
&&&&&&&& &/AlternatingItemStyle&
&&&&&&&& &HeaderTemplate&
&&&&&&&&&&& Items
&&&&&&&& &/HeaderTemplate&
&&&&&&&&&&&&&&
&&&&&&&&&&ItemTemplate&
&&&&&&&&&&& &%# DataBinder.Eval(Container.DataItem, &StringValue&) %&
&&&&&&&& &/ItemTemplate&
&&&&&&&/asp:DataList&
&&&&&&& &br&&br&
&&&&& &asp:Button id=&Button1&
&&&&&&&&&& Text=&显示DataList1表第一列的所有内容&
&&&&&&&&&& OnClick=&Button_Click&
&&&&&&&&&& runat=&server&/&
&&&&&&&br&&br&
&&&&& &asp:Label id=&Label1&
&&&&&&&&&& runat=&server&/&
&&&&/form&
如果使用控件DataGrid,有时需要知道指定行的指定列的数据,表达式DataGrid1.Items[2].Cells[1].Text表示网格控件DataGrid1的第2行第1列的文本。具体例子如下:
&%@ Import namespace=&System.Data& %&
&script language=&C#& runat=&server&&
& void Page_Load(Object sender, EventArgs e ) {
&& if (!Page.IsPostBack) {
&&&& DataTable dt = new DataTable();//建立一个数据表
&&&& DataR//建立一个数据表的记录变量
&&&& dt.Columns.Add(new DataColumn(&整数值&, typeof(Int32)));//增加字段
&&&& dt.Columns.Add(new DataColumn(&字符串值&, typeof(string)));//包括字段名
&&&& dt.Columns.Add(new DataColumn(&日期时间值&, typeof(DateTime)));//及字段类型
&&&& dt.Columns.Add(new DataColumn(&布尔值&, typeof(bool)));
&&&& for (int i = 1; i &= 9; i++) {//增加10个记录
&&&&&&& dr = dt.NewRow();//建立1个记录对象
&&&&&&& dr[0] =//为记录的每个字段赋值
&&&&&&& dr[1] = &项 & + i.ToString();
&&&&&&& dr[2] = DateTime.N
&&&&&&& dr[3] = (i % 2 != 0) ? true :
&&&&&&& dt.Rows.Add(dr);//把此记录加到数据表中
&&&&&& dataGrid1.DataSource = new DataView(dt);//为dataGrid指定数据源
&&&&&& dataGrid1.DataBind();//数据更新
&& void Button_Click(Object sender, EventArgs e)
&&& Label1.Text=dataGrid1.Items[2].Cells[1].T
&&& &form runat=server&
&&&&&&& &asp:DataGrid id=&dataGrid1& runat=&server&
&&&&&&&&& BorderColor=&black&
&&&&&&&&& BorderWidth=&1&
&&&&&&&&& GridLines=&Both&
&&&&&&&&& CellPadding=&3&
&&&&&&&&& CellSpacing=&0&
&&&&&&&&& HeaderStyle-BackColor=&#aaaadd&
&&&&&&& /&
&&&&& &br&&br&
&&&&&&& &asp:Button id=&Button1&
&&&&&&&& &&Text=&显示DataGrid1表第二行第一列的内容&
&&&&&&&&&& OnClick=&Button_Click&
&&&&&&&&&& runat=&server&/&
&&&&& &br&&br&
&&&&&&& &asp:Label id=&Label1& runat=&server&/&
&&& &/form&
使用DataList和DataGraid的属性Style可定义控件的外观。见下例:
&asp:DataGrid id=&grid& runat=&server& visible=&false&
&&&&&&&& CssClass=&Shadow& BackColor=&white&
&&&&&&&& CellPadding=&2& CellSpacing=&2& GridLines=&none&
&&&&&&&& BorderStyle=&solid& BorderColor=&black& BorderWidth=&1&
&&&&&&&& font-size=&x-small& font-names=&verdana&&
&&&&&&&& &AlternatingItemStyle BackColor=&palegoldenrod& /&
&&&&&&&& &ItemStyle BackColor=&beige& /&
&&&&&&&& &HeaderStyle ForeColor=&white& BackColor=&brown& Font-Bold=&true& /&
&/asp:DataGrid&
其中定义了控件DataGraid的背景为白色,边界为黑实线,宽度为1个象素,字体为&x-small&,字体名字为&verdana&。奇数行的背景颜色,标题的字的颜色,背景色。数据项的背景色等等。显示效果见7.1.2的例子。
4. ItemTemplate 属性
控件DataList中的ItemTemplate是模板控件,其功能是将控件DataList的数据源中的所有数据,按ItemTemplate模板控件所指定的格式显示。DataList 控件中项的外观由ItemStyle属性控制。还可以使用 AlternatingItemTemplate 属性来控制 DataList 控件中交替项的内容。具体例子见6.6节中3.数据绑定和Items集合的创建的例子。
DataGraid控件没有ItemTemplate模板,可使用模板列控件TemplateColumn,在模板列控件中增加ItemTemplate模板自己定义该列的显示控件或显示格式,具体例子见7.1.6列类型的第3和第4个例子。还可以在其中增加EditItemTemplate模板自己定义该列在编辑时使用的控件,具体例子见7.2.5节例子。
Repeater控件的ItemTemplate模板见8.4节例子。
5. 模板中的数据绑定
模板中的数据绑定的例子见上一节中的例子。
6.6.2 使用列表绑定控件
&%@ Import Namespace=&System.Data& %&
&& &script language = &C#& runat=&server&&
&&&&&&ICollection CreateDataSource()
&&&&&&&& DataTable dt = new DataTable();
&&&&&&&& DataR
&&&&&&&&&dt.Columns.Add(new DataColumn(&StringValue&, typeof(string)));
&&&&&&&&&for (int i = 0; i & 10; i++)
&&&&&&&&&{
&&&&&&&&&&& dr = dt.NewRow();
&&&&&&&&&&& dr[0] = &Item & + i.ToString();
&&&&&&&&&&& dt.Rows.Add(dr);
&&&&&&&& }
&&&&&&&&&DataView dv = new DataView(dt);
&&&&&&void Page_Load(Object sender, EventArgs e)
&&&&&&&& if (!IsPostBack)
&&&&&&&&&{
&&&&&&&&&&& DataList1.DataSource = CreateDataSource();
&&&&&&&&&&& DataList1.DataBind();
&&&&&&&& }
&&&&&&void Button1_Click(Object sender, EventArgs e)
&&&&&&&&&if (DropDown1.SelectedIndex == 0)
&&&&&&&&&&& DataList1.RepeatDirection = RepeatDirection.H
&&&&&&&& else
&&&&&&&&&&& DataList1.RepeatDirection = RepeatDirection.V
&&&&&&&& if (DropDown2.SelectedIndex == 0)
&&&&&&&&&&& DataList1.RepeatLayout = RepeatLayout.T
& &&&&&&&else
&&&&&&&&&&& DataList1.RepeatLayout = RepeatLayout.F
&&&&&&&& DataList1.RepeatColumns=DropDown3.SelectedIndex+1;
&&&&&&&&&if ((Check1.Checked ==true) && (DataList1.RepeatLayout == RepeatLayout.Table))
&&&&&&&&&{
&&&&&&&&&&& DataList1.BorderWidth = Unit.Pixel(1);
&&&&&&&&&&& DataList1.GridLines = GridLines.B
&&&&&&&& }&&&
&&&&&&&&&else&
&&&&&&&&&{
&&&&&&&&&&& DataList1.BorderWidth = Unit.Pixel(0);
&&&&&&&&&&& DataList1.GridLines = GridLines.N
&&&&&&&& }&&&
&&&&&&}&&&
&&&&/script&
&&&&form runat=server&
&&&&& &h3&DataList Example&/h3&
&&&&&&&asp:DataList id=&DataList1& runat=&server&
&&&&&&&&&& BorderColor=&black&
&&&&&&&&&& CellPadding=&3&
&&&&&&&&&& Font-Name=&Verdana&
&&&&&&&&&& Font-Size=&8pt&&
&&&&&&&& &HeaderStyle BackColor=&#aaaadd&&
&&&&&&&& &/HeaderStyle&
&&&&&&&& &AlternatingItemStyle BackColor=&Gainsboro&&
&&&&&&&& &/AlternatingItemStyle&
&&&&&&&& &HeaderTemplate&
&&&&&&&&&&& Items
&&&&&&&& &/HeaderTemplate&
&&&&&&&&&&&&&&
&&&&&&&&&&ItemTemplate&
&&&&&&&&&&& &%# DataBinder.Eval(Container.DataItem, &StringValue&) %&
&&&&&&&& &/ItemTemplate&
&&&&&&&& &AlternatingItemTemplate&
&&&&&&&&&&& *
&&&&&&&&&&& &%# DataBinder.Eval(Container.DataItem, &StringValue&) %&
&&&&&&&& &/AlternatingItemTemplate&
&&&&&&&/asp:DataList&
&&&&& &hr noshade align=&left& width=&300px&&
&&&&& RepeatDirection:
&&&&& &asp:DropDownList id=DropDown1 runat=&server&&
&&&&&&&& &asp:ListItem&Horizontal&/asp:ListItem&
&&&&&&&& &asp:ListItem&Vertical&/asp:ListItem&
&&&&& &/asp:DropDownList&&br&
&&&&&&RepeatLayout:
&&&&& &asp:DropDownList id=DropDown2 runat=&server&&
&&&&&&&& &asp:ListItem&Table&/asp:ListItem&
&&&&&&&& &asp:ListItem&Flow&/asp:ListItem&
&&&&& &/asp:DropDownList&&br&
&&&&&&RepeatColumns:
&&&&& &asp:DropDownList id=DropDown3 runat=&server&&
&&&&&&&& &asp:ListItem&1&/asp:ListItem&
&&&&&&&& &asp:ListItem&2&/asp:ListItem&
&&&&&&&& &asp:ListItem&3&/asp:ListItem&
&&&&&&&& &asp:ListItem&4&/asp:ListItem&
&&&&&&&& &asp:ListItem&5&/asp:ListItem&
&&&&& &/asp:DropDownList&&br&
&&&&&&Show Borders:
&&&&& &asp:CheckBox id=Check1 runat=&server& /&&p&
&&&&&&&asp:LinkButton id=Button1
&&&&&&&&&&&Text=&Refresh DataList&
&&&&&&&&&&&OnClick=&Button1_Click&
&&&&&&&&&&&runat=&server&/&
&&&&/form&
如果使用Visual Studio.Net实现模板,具体步骤如下:
1.& ASP.NET 声明性数据绑定语法使用 &%# %& 表示法。
2.& 可以绑定到数据源、页或其他控件的属性、集合、表达式以及从方法调用返回的结果。
3.& 列表控件可以绑定到支持 ICollection、IEnumerable 或 IListSource 接口的集合,如 ArrayList、Hashtable、DataView 和 DataReader。
4.&&&&&& DataBinder.Eval 是用于晚期绑定的静态方法。它的语法可能比标准数据绑定语法简单,但性能较低。
10.2& 数据验证控件
用户输入了数据,在提交前,首先要对输入的数据进行验证。当然,可以自己编程序进行验证。ASP.NET提供了一些验证控件,可以不用编程完成对输入的数据进行验证。本节介绍如何使用这些数据验证控件。
10.3.1&&& 数据验证概述
对用户输入的数据进行验证,可以在客户端进行。实现原理是当用户输入了信息并单击提交按钮后,用在客户端运行的JavaScript脚本或VBScript脚本对数据验证,只有所有数据正确,才能发送到服务器端处理。此种方法的优点是运行在客户端,因此反应速度快,减轻了服务器和网络的负载。缺点是由于JavaScript脚本或VBScript脚本是以明文的方式嵌入在HTML文档中,客户端可以看到这些脚本程序,如果用户把这段脚本删除,网页也就失去了验证功能,因此这种方法是不安全的。
另一种数据验证方法是在服务器端进行,当用户输入了信息并单击提交按钮后,把数据立刻发送到服务器端,在服务器端验证,如果验证不通过,返回错误信息。这种方法虽然在响应速度比较慢,增加了服务器的负担,但可靠性上要强的很多。
ASP.NET提供了一些验证控件,可以不用编程完成对输入的数据进行验证。下边是一个使用验证控件简单的例子,该例以数据验证控件RequiredFieldValidator为例,介绍数据验证控件属性的使用方法。有些数据用户是必须输入的,这些数据可以用编辑控件,单选或多选按钮等控件输入。可以用控件RequiredFieldValidator对这些控件输入的数据进行验证,检查用户是否输入了数据。控件RequiredFieldValidator的属性ControlToValidate的值选择要验证的控件的id值,可以是编辑控件,单选或多选按钮等。属性ErrorMessage是发生错误时,提示的错误信息。用户用编辑控件textBox1输入姓名,要求必须输入。用控件RequiredFieldValidator1对其输入进行验证,因此属性ControlToValidate= textBox1。属性ErrorMessage=&必须输入姓名&。当单击提交按钮后,如果用户没有输入姓名,则用&必须输入姓名&提示用户。
&form id=&Form1& method=&post& runat=&server&&
&p&姓名:&asp:TextBox id=& TextBox1& runat=&server&/&&/p&
&p&&asp:Button Text=&提交& runat=server/&&/p&
&asp:RequiredFieldValidator id=&RequiredFieldValidator1& runat=&server&
ErrorMessage=&RequiredFieldValidator& ControlToValidate=&RadioButtonList1&&
&/asp:RequiredFieldValidator&
10.3.2&&& 常用的验证控件
.Net框架类库中提供以下几种验证控件:
l& RequiredFieldValidator控件
l& 自定义数据验证控件CustomValidator控件
l& ValidationSummary控件
l& CompareValidator控件
l& RegularExpressionValidator 控件
10.3.3&&& 验证控件常用的属性
l& 属性ControlToValidate:要验证的控件的id值。
l& 属性ErrorMessage:发生错误时,提示的错误信息。
l& 属性Display:
l& 属性IsValid:
l& 属性Text:
10.3.4&&& RequiredFieldValidator
上边已介绍用记事本编辑网页如何使用此控件,下边的例子用Visual Studio.Net 编辑。该例子增加一个RadioList控件,输入卡的类型,增加一个编辑控件,输入编号,两者都要求必须输入,用两个RequiredFieldValidator控件验证。步骤如下:
(1)创建一个Web应用程序框架,选择菜单命令建立一个新空白窗体。
(2)放工具箱的Label控件到窗体,其属性[Text]=&RequiredFieldValidator控件的使用&。Id=Label1。
(3)放工具箱的Label控件到窗体,其属性[Text]=&输入卡号&。
(4)放工具箱的RadioButtonList控件到窗体,id=RadioButtonList1。
(5)单击属性Items后的按钮,出现集合编辑器对话框。单击添加按钮,增加一个RadioButton按钮,修改其Text属性为&苹果卡&,修改其Selected属性为法false。用同样方法增加另一个RadioButton按钮,修改其Text属性为&橡胶卡&,修改其Selected属性为法false。
(6)放工具箱的Label控件到窗体,其属性[Text]=&输入编号&。
(7)放工具箱的TextBox控件到窗体,id=TextBox1。
(8)放工具箱的RequiredFieldValidator控件到窗体, 属性ControlToValidate= RadioButtonList1, 属性ErrorMessage=&必须输入卡类型&。
(9)放工具箱的RequiredFieldValidator控件到窗体, 属性ControlToValidate=TextBox1, 属性ErrorMessage=&必须输入编号&。
(10)&&&&& 放工具箱的Button控件到窗体,为其增加单击事件函数如下:
private void Button1_Click(object sender, System.EventArgs e)
&&&&&&&& {
&&&&&&&&&&&&& if(Page.IsValid==true)
&&&&&&&&&&&&&&&&&& Label1.Text=&已输入了数据&;
&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&& Label1.Text=&至少有一项未输入了数据&;
&&&&&&&& }
(11)& 如运行出错,把C:\inetpub\wwwroot\aspnet_client文件夹拷贝到D:\Asp文件夹下。运行
10.3.5&&& 自定义数据验证控件CustomValidator控件
CustomValidator控件允许编程者自己定义一个函数对数据进行验证。一般数据验证分为客户端验证和服务器端验证,可以修改验证控件的属性ClientTarget改变在那端验证,例如:Page.ClientTarget=ClientTarget.Downlevel语句表示要在服务器端验证,而语句Page.ClientTarget=ClientTarget.Uplevel表示在客户端验证,在客户端验证必须在发布目录下包含C:\inetpub\wwwroot\aspnet_client文件夹。因此,编程者要根据在那一端验证,编写不同的函数,在服务器端验证函数定义如下:
void ServerValidate(object source, ServerValidateEventArgs args){//验证语句}
在客户端验证函数定义如下:?
void ClientValidate(source,value){//验证语句}
书中的例子如下:
&%@ Page Language=&C#& %&
&& &script runat=server&
&&&&& void ValidateBtn_OnClick(object sender, EventArgs e)
&&&&&&&& if (Page.IsValid)
&&&&&&&& {
&&&&&&&&&&& lblOutput.Text = &Page is valid.&;
&&&&&&&& }
&&&&&&&& else
&&&&&&&& {
&&&&&&&&&&& lblOutput.Text = &Page is not valid!&;
&&&&&&&& }
&&&&& void ServerValidate(object source, ServerValidateEventArgs args)
&&&&&&&& try
&&&&&&&& {
&&&&&&&&&&& int i = int.Parse(args.Value);
&&&&&&&&&&& args.IsValid = ((i%2) == 0);
&&&&&&&& }
&&&&&&&& catch
&&&&&&&& {
&&&&&&&&&&& args.IsValid =
&&&&&&&& }
&& &/script&&&&
&& &form runat=&server&&
&&&&& &h3&CustomValidator Example&/h3&
&&&&& &asp:Label id=lblOutput runat=&server&
&&&&&&&&&& Text=&Enter an even number:&
&&&&&&&&&& Font-Name=&Verdana&
&&& &&&&&&&Font-Size=&10pt& /&&br&
&&&&& &asp:TextBox id=&Text1&
&&&&&&&&&& runat=&server& /&
&&&&& &asp:CustomValidator id=&CustomValidator1&
&&&&&& &ControlToValidate=&Text1& ErrorMessage=&Not an even number!&
&&&&&& &OnServerValidate=&ServerValidate& runat=&server&/&
&&&&& &asp:Button id=&Button1&
&&&&&&&&&& Text=&Validate&
&&&&&&&&&& OnClick=&ValidateBtn_OnClick&
&&&&&&&&&& runat=&server&/&
&& &/form&
用Visual Studio.NET实现此例,具体步骤如下:
(1)创建一个Web应用程序框架,选择菜单命令建立一个新空白窗体。
(2)放工具箱的Label控件到窗体,其属性[Text]=&CustomValidator 控件的使用&。Id=Label1。
(3)放工具箱的Label控件到窗体,其属性[Text]=&键入一个偶数&。
(4)放工具箱的TextBox控件到窗体,id=TextBox1。
(5)放工具箱的CustomValidator控件到窗体,id=CustomValidator1,属性ControlToValidate=TextBox1, 属性ErrorMessage=Not an even number!。
(6)放工具箱的Button控件到窗体,为其增加单击事件函数如下:
void ValidateBtn_OnClick(Object sender,EventArgs e)
&&&&&& {&& If (Page.IsValid)
&&&&&&&&&&&&& lblOutput.Text = &Page is Valid!&;
&&&&&&&&&& else
&&&&&&&&&&&&& lblOutput.Text = &Page is InValid!&;
(7)为CustomValidator控件ServerValidate事件增加事件函数如下
private void CustomValidator1_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
&&&&&&&& {
&&&&&&&&&&&&& try
&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&& int i = int.Parse(args.Value);
&&&&&&&&&&&&&&&&&& args.IsValid = ((i%2) == 0);
&&&&&&&&&&&&& }
&&&&&&&&&&&&& catch
&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&& args.IsValid =
&&&&&&&&&&&&& }
10.3.6&&& ValidationSummary控件
当用户提交了数据后,所有验证控件对数据进行验证,如果没有错误,设置Page.IsValid=true,否则=false。如果在页面中放置了控件ValidationSummary,它将自动显示发现错误的数据验证控件的属性ErrorMessage的内容。可以在5.2.1的例子中,增加一个ValidationSummary控件,运行后看一下效果。
10.3.7&&& CompareValidator控件
CompareValidator控件可以对两个控件输入的值进行比较。属性ControlToValidate=控制对象的id,属性ValueToCompare=要比较得值,属性Type=比较的数据类型,属性Operator=如何比较,可以是:Equal、NotEqual、GreatrThan、GreatrThanEqual、LessThan、LessThanEqual。用Visual Studio.NET实现此例,具体步骤如下:
(1)创建一个Web应用程序框架,选择菜单命令建立一个新空白窗体。
(2)放三个Label控件到窗体,其属性[Text]分别为&First string&、&Second string&和&lblOutput&。id分别为Label1、Label2和lblOutput。
(3)在Label1和Label2控件后,分别放置TextBox控件,id分别为TextBox1和TextBox2。
(4)放工具箱的CompareValidator控件到窗体,属性ControlToValidate=TextBox1,属性ControlToCompare=TextBox2,属性ErrorMessage=Not an even number!,id=Compare1。
(5)放两个ListBox控件到窗体,id分别为ListOperator和ListType。
(6)单击ListOperator属性Items旁的三个小点,在ListItem编辑器对话框中单击添加按钮,增加6个选项,属性Text分别为:Equal、NotEqual、GreatrThan、GreatrThanEqual、LessThan、LessThanEqual,同时,属性Value也变为相应的值。
(7)单击ListType属性Items旁的三个小点,在ListItem编辑器对话框中单击添加按钮,增加5个选项,属性Text分别为:String、Integer、Double、Date、Currency,同时,属性Value也变为相应的值。
(8)设置两个ListBox控件属性SelectionMode为Single,不允许多选。(为什么?)
(9)设置两个ListBox控件属性AutoPostBack=true。
(10)&&&&& 为ListOperator事件(SelectedIndexChenged)增加事件函数如下:
private void ListOperator_SelectedIndexChanged(object sender, System.EventArgs e)
&&&&&&&& {
&&&&&&&&&&&&& Compare1.Operator=(ValidationCompareOperator)ListOperator.SelectedI
&&&&&&&&&&&&& Compare1.Validate();
&&&&&&&& }
(11)&&&&& 为ListType事件(SelectedIndexChenged)增加事件函数如下:
private void ListType_SelectedIndexChanged(object sender, System.EventArgs e)
&&&&&&&& {
&&&&&&&&&&&&& Compare1.Type=(ValidationDataType)ListType.SelectedI
&&&&&&&&&&&&& Compare1.Validate();
&&&&&&&& }
(12)&&&&& 放工具箱的Button控件到窗体,为其增加单击事件函数如下:
private void Button1_Click(object sender, System.EventArgs e)
&&&&&&&& {
&&&&&&&&&&&&& //Label1.Text=DropDownList1.SelectedItem.T
&&&&&&&&&&&&& if(Page.IsValid==true)
&&&&&&&&&&&&&&&&&& lblOutput.Text=&数据有效&;
&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&& lblOutput.Text=&数据无效&;
&&&&&&&& }
(13)&&&&& 运行,看一下效果。增加列表内容用如下语句
listBox1.Items.Add(&Item9&);//在列表最后增加一项
listBox1.SetSelected(1, true);//第一项被选中
&&&&&& listBox1.EndUpdate();//更新
5.2.5 RangeValidator 控件
RangeValidator 控件测试输入控件的值是否在指定范围内。RangeValidator 控件使用四个关键属性执行验证。ControlToValidate 属性包含要验证的输入控件。MinimumValue 和 MaximumValue 属性指定有效范围的最大值和最小值。BaseCompareValidator.Type 属性用于指定要比较的值的数据类型。在执行验证操作之前,要比较的值被转换为此数据类型。可以进行比较的不同数据类型: 字符串数据类型String、32 位有符号整数数据类型Integer、双精度浮点数数据类型Double、日期数据类型Date、一种可以包含货币符号的十进制数据类型Currency。
下面的示例说明如何在 Web 页上创建 RangeValidator 控件,以检查输入到输入控件的值是否在比较范围内。
&%@ Page Language=&C#& %&
&& &script runat=&server&&
&&&&& void ButtonClick(Object sender, EventArgs e)
&&&&&&&& if (Page.IsValid)
&&&&&&&& {
& &&&&&&&&&&Label1.Text=&Page is valid.&;
&&&&&&&& }
&&&&&&&& else
&&&&&&&& {
&&&&&&&&&&& Label1.Text=&Page is not valid!!&;
&&&&&&&& }
&& &/script&
&& &form runat=&server&&
&&&&& &h3&RangeValidator Example&/h3&
&&&&& Enter a number from 1 to 10:
&&&&& &br&
&&&&& &asp:TextBox id=&TextBox1&
&&&&&&&&&& runat=&server&/&
&&&&& &br&
&&&&& &asp:RangeValidator id=&Range1&
&&&&&&&&&& ControlToValidate=&TextBox1&
&&&&&&&&&& MinimumValue=&1&
&&&&&&&&&& MaximumValue=&10&
&&&&&&&&&& Type=&Integer&
&&&&&&&&&& EnableClientScript=&false&
&&&&&&&&&& Text=&The value must be from 1 to 10!&
&&&&&&&&&& runat=&server&/&
&&&&& &br&&br&
&&&&& &asp:Label id=&Label1&
&&&&&&&&&& runat=&server&/&
&&&&& &br&&br&
&&&&& &asp:Button id=&Button1&
&&&&&&&&&& Text=&Submit&
&&&&&&&&&& OnClick=&ButtonClick&
&&&&&&&&&& runat=&server&/&
&& &/form&
10.3.8&&& RegularExpressionValidator 控件
RegularExpressionValidator 控件也叫正则表达式控件,该控件用来检查输入控件的值是否匹配正则表达式定义的模式。这类验证允许您检查可预知的字符序列,比如身份证号码、电子邮件地址、电话号码和邮编中的字符序列。本节首先讲解一些正则表达式的基本知识,然后将这些基本知识用于数据验证控件。
1.基本模式
模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成;也可以非常复杂,可以用特殊的字符表示一个范围内的宇符、重复出现等。最简单的匹配就是一个字符串,这种情况下,如果一个字符串含有这个字符串,那么那个字符串就认为是符合匹配要求的。
l& &^&头匹配
这个模式包含一个特殊的字符^,表示该模式只匹配那些以紧接其后的以字符串。例如:^front,表示以&front&开头的字符串是匹配的,而不以&front&开头的字狩串是不匹配的。
l& &$&尾匹配
&&& 尾匹配&$&的意义是,只有那些以&$&号前面的字符串结尾的字符串才符合匹配的要求,例如:tail$,表示那些以&tail&结尾的字符串是匹配的。结合使用&^&和&S&,可以提供一种整个字符串匹配的模式:^whole$,就表示仅有&whole&字符串符合匹配要求。
2.转义序列
所谓转义序列其实就是一些无法直接在正则表达式中使用的字符,例如标点符号、空格、
回车、换行、制表符等。所有的转义序列都用反斜杠(\)打头。和&C&语言中类似,转义序列也是以&\&开头的,如:
制表符:\t
由于在正则表达式中&^&、&S&和&+&等都有特殊的意义,所以在正则表达式中也需要使用转义序列来表示&\^&&\$&和&\+&。
在Internet中,正规表达式通常用来舰用户的输人,当用户提交一个Form以后,要判断输入的电话号码、地址、Enail地址、信用卡号码、邮政编码等是否有效,用普通的基于字面的字符是不够的,需要一种可以设定一个字符集合的方法,在正则表达式中,这种方法称为字符簇,一个字符簇是使用方挂号括起来的。下面举一个例子:[ABCabc],上面的字符簇例子表示如果一个字符是&A&或&B&或&C&或&a&或&b&或&C&,那么就符合匹配要求。
当需要一个有顺序的返回的时候,可以使用连字号来表示二个字符的范围,如:[a-z]匹配所有的小写字母。[A-Z]匹配所有的大写字母。[az-AZ]匹配所有字母。[0-9]匹配所有的数字。[0-9\.\-] 匹配所有的数字,句号和减号。[\f\r\t\n]匹配所有的白字符。
前面曾经提到^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用^时,它表示&非&或&排除&的意思,常常用来剔除某个字符。例如,如果要求第一个字符不能是小写字母:^[^a-z], 这个模式与&A4&、&7b&及&+a&是匹配的,但与&a2&、&c6&是不匹配的。下面是几个排除特定字符字符的例子:[&a-z&],除了小写字母以外的所有字符。[^&0-9&],除了数字之外的所有字符。[^\&\&],除了双引号(&)和单引号(&)之外的所有字符。特殊字符&.&(点号)在正规表达式中用来表示除了&新行&之外的所有字符。所以模式&^.5$&与任何两个字符的、以数字5结尾和以其他非&新行&字符开头的字符串匹配。模式&.&可以匹配任何字符串,除了空串和只包括一个&新行&的字符串。
到现在为止,已经讨论了如何去匹配一个字母或数字,但更多的情况下,可能要匹配一个单词或一组数字。一个单词由若干个字母组成,一组数字由若干个单数组成。
正则表达式提供了&{}&来执行重复,跟在字符或字符簇后面的花括号({})用来确定前面的内容重复出现的次数。其中{n,m}表示可能重复n到m次并且包括n和m次,{n,}表示可能重复n次或大于n次。例如:^a{4}$表示aaaa。^a(2,4)$表示aa,aaa,或aaaa。^a{2,}$表示包含多于两个a的字符串。.{2}表示所有的两个字符。
下面是常用的一些模式:
^[a-zA-Z0-9_]{1,}$表示所有包含一个以上的字母、数字或下划线的字符串。
^[0-9]{1,}$ 表示所有的整数。
^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ 表示所有小数。
正则表达式提供了一些简写的特殊字符,可以让表达式容易理解:
?&&&&& {0,1}
*&&&&&& {0,}
+&&&&&& {1,}
例如:^[0-9]+$ 表示所有的整数。^[0-9]+$ 表示所有的整数。^\-?[0-9]*\.?[0-9]+$表示所有小数。
下例说明如何使用 RegularExpressionValidator 验证一个 5 位数的邮编。
&%@ Page Language=&C#& %&
&&& &script runat=&server&&
&&&&&&& void ValidateBtn_Click(Object sender, EventArgs e)
&&&&&&&&& if (Page.IsValid)
&&&&&&&&&&{
&&&&&&&&&&&& lblOutput.Text = &Page is Valid!&;
&&&&&&&&& }
&&&&&&&&& else
&&&&&&&&&&{
&&&&&&&&&&&& lblOutput.Text = &Page is InValid! :&;
&&&&&&&&& }
&&&& &/script&
&&&& &h3&RegularExpressionValidator Example&/h3&
&&&& &form runat=&server&&
&&&&&&& &table bgcolor=&#eeeeee& cellpadding=&10&&
&&&&&&&&& &tr valign=&top&&
&&&&&&&&&&&& &td colspan=&3&&
&&&&&&&&&&&&&&& &asp:Label ID=&lblOutput&
&&&&&&&&&&&&&&&&&&&&&Text=&Enter a 5 digit zip code&
&&&&&&&&&&&&&&&&&&&&&runat=&server&/&
&&&&&&&&& &&&&/td&
&&&&&&&&& &/tr&
&&&&&&&&& &tr&
&&&&&&&&&&&& &td colspan=&3&&
&&&&&&&&&&&&&&& &b&Personal Information&/b&
&&&&&&&&&&&& &/td&
&&&&&&&&& &/tr&
&&&&&&&&& &tr&
&&&&&&&&&&&& &td align=&right&&
&&&&&&&&&&&&&&& Zip Code:
&&&&&&&&&&&& &/td&
&&&&&&&&&&&& &td&
&&&&&&&&&&&&&&& &asp:TextBox id=&TextBox1&
&&&&&&&&&&&&&&&&&&&&&runat=&server&/&
&&&&&&&&&&&& &/td&
&&&&&&&&&&&& &td&
&&&&&&&&&&&&&&& &asp:RegularExpressionValidator id=&RegularExpressionValidator1&
&&&&&&&&&&&&&&&&&&&&&ControlToValidate=&TextBox1&
& &&&&&&&&&&&&&&&&&&&ValidationExpression=&\d{5}&
&&&&&&&&&&&&&&&&&&&& Display=&Static&
&&&&&&&&&&&&&&&&&&&& ErrorMessage=&Zip code must be 5 numeric digits&
&&&&&&&&&&&&&&&&&&&& EnableClientScript=&False&
&&&&&&&&&&&&&&&&&&&&&runat=&server&/&
&&&&&&&&&&&& &/td&
&&&&&&&&& &/tr&
&&&&&&&&& &tr&
&&&&&&&&&&&& &td&&/td&
&&&&&&&&&&&& &td&
&&&&&&&&&&&&&&& &asp:Button text=&Validate&
&&&&&&&&&&&&&&&&&&&&&OnClick=&ValidateBtn_Click&
&&&&&&&&&&&&&&&&&&&&&runat=server /&
&&&&&&&&&&&& &/td&
&&&&&&&&&&&& &td&&/td&
&&& &&&&&&&/tr&
&&&&&& &/table&
&&&& &/form&
如用Visual Studio.NET实现,只需修改属性ValidationExpressio即可。
-----------

我要回帖

更多关于 asp.net 截取字符串 的文章

 

随机推荐