asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP.NET 3.5中使用新的ListView控件


发布日期:2021年09月06日
 
ASP.NET 3.5中使用新的ListView控件

ASPNET中新的ListView控件为显示和CURD数据库操作提供了基于模板的布局使之成为一项极好的方式建立以数据为中心的Web应用程序

当你编写以用户为中心的应用程序时总需要某种形式的数据集起码来说你需要从一个数据源如关系数据库或XML文件检索数据在显示给用户之前先要进行格式化尽管ASPNET之前的版本就提供了以数据为中心的显示控件如GridView这些控件缺乏专业Web开发人员需要的可自定义和可扩展特性为了解决这个问题ASPNET提供了一个新的控件ListView它提供了非常优秀的自定义和扩展特性使用这些特性你可以以任何格式显示数据使用模板和样式同时用最少的代码执行CURD(创建读取更新删除)操作

本文主要集中于使用新的ListView控件时数据访问步骤同时还包括高级特性如编辑数据和处理事件

ListView控件入门

ASPNET提供的大部分数据绑定控件都是使用额外的标记自动封装显示数据举例来说GridView控件在一个HTML表格( )中显示它的数据每条记录显示一行( )每个字段显示为一个单元格( )虽然你可以使用TemplateField组件自定义GridView的外观但GridView的输出仍然是限制在一个table组件中的但有时候你想要完全控制由数据绑定控件产生的HTML标记的外观这正是ListView控件的优势ListView控件不是使用额外的标记来封装它的输出内容而是靠你指定的精确的HTML描述使用ListView控件内置的模板就可以指定精确的标记列出了ListView控件支持的模板

模板

用途

AlternatingItemTemplate

交替项目模板

用不同的标记显示交替的项目便于查看者区别连续不断的项目

EditItemTemplate

编辑项目模板

控制编辑时的项目显示

EmptyDataTemplate

空数据模板

控制ListView数据源返回空数据时的显示

EmptyItemTemplate

空项目模板

控制空项目的显示

GroupSeparatorTemplate

组分隔模板

控制项目组内容的显示

GroupTemplate

组模板

为内容指定一个容器对象如一个表行div或span组件

InsertItemTemplate

插入项目模板

用户插入项目时为其指定内容

ItemSeparatorTemplate

项目分隔模板

控制项目之间内容的显示

ItemTemplate

项目模板

控制项目内容的显示

LayoutTemplate

布局模板

指定定义容器对象的根组件如一个tablediv或span组件它们包装ItemTemplate或GroupTemplate定义的内容

SelectedItemTemplate

已选择项目模板

指定当前选中的项目内容的显示最关键的两个模板是LayoutTemplate和ItemTemplate正如名字暗示的那样LayoutTemplate为ListView控件指定了总的标记而ItemTemplate指定的标记用于显示每个绑定的记录例如下面的代码显示了在ListView中由HTML table控制的一串项目

在前面的代码中LayoutTemplate标记内的 标记的ID是设置项目占位符(itemPlaceHolder)它告诉ListView通过内的ItemTemplate产生的内容要放到什么地方这就是为什么你需要单独定义LayoutTemplate和ItemTemplate模板的原因

一个简单的数据绑定的例子你已经看到LisView控件支持的多个模板了下一步是要创建一个简单的web站点名字就叫做ListViewExample(你可以从_tt_mainsourcezip下载该站点的示例代码)创建好web站点后选择Web站点?添加新项目添加一个新的ASPNET页面名字命名为SimpleListViewaspx(见清单这个页面将使用ListView控件从AdventureWorks示例数据库中的Product表显示产品数据

清单ListView控件示例清单> DataSourceID=productSource DataKeyNames=ProductID> > PreviousPageText=<—— NextPageText=——> /> Product ID Text= /> Name Text= /> Product Number runat=server Text= />

There are no products!

DataSourceMode=DataSet ConnectionString= SelectCommand=SELECT ProductIDNameProductNumberColorListPrice FROM ProductionProduct>在清单SqlDataSource通过设置ConnectionString 和SelectCommand 属性控制从AdventureWorks数据库的Product表中检索数据ConnectionString属性通过一个ASPNET表达式从nfig文件获取连接字符串在我的测试机上连接字符串定义在nfig中connectionString=server=localhostuid=sapwd=thirudatabase=AdventureWorks/>设置好SqlDataSource属性后下一步是通过ListView控件显示数据下面是在LayoutTemplate模板中的标记> PreviousPageText=<—— NextPageText=——> />

LayoutTemplate模板定义了ListView控件输出内容的容器除了在ListView控件顶层定义了table外LayoutTemplate模板还定义了它为ListView控件提供了分页功能DataPager让你可以为任何数据绑定控件实现IpageableItemContainer进行数据分页并显示导航控制

有两种方法使数据分页(DataPager)和数据绑定(databound)联合使用

设置DataPager 的PagedControlID属性为databound的名字

将DataPager置于databound层次体系之下对于ListView控件你可以将DataPager置于LayoutTemplate组件内

设置DataPager的PageSize属性它控制每页显示的数据行数你也可以在页面提交到服务器时通过设置QueryStringField属性实现

在DataPager内你指定NumericPageField模板它可以让用户输入一个页号然后按照页号进行跳转

PreviousPageText=<

NextPageText=> />

ItemTemplate组件为每个记录的明细提供了标记显示了在浏览器中导航到该页面的输出

ListView示例通过数据绑定ListView控件到SqlDataSource控件检索Product表中部分数据产生的输出

用ListView控件编辑数据

正如你所看到的使用ListView控件显示数据相对要直接得多但你还可以让用户在ListView中直接编辑数据添加一个新页面ListViewEditExampleaspx它的代码如清单所示

清单编辑ListView

>

DataKeyNames=DepartmentID runat=server

OnItemUpdated=deptsView_ItemUpdated

OnPagePropertiesChanged=deptsView_PagePropertiesChanged>

runat=server id=tblProducts>

Name

Group Name

Action

PageSize=>

ShowLastPageButton=True FirstPageText=|<<

LastPageText= >>| NextPageText= >

PreviousPageText= < />

Text= />

Text= />

CommandName=Edit />

Text=

MaxLength= />

CommandName=Update Text=Update />

CommandName=Cancel Text=Cancel />

ConnectionString=

SelectCommand=SELECT [DepartmentID][Name][GroupName] FROM

HumanResourcesDepartment UpdateCommand=UPDATE

HumanResourcesDepartment SET Name = @Name

GroupName = @GroupName WHERE DepartmentID = @DepartmentID>

FontBold=true />

清单的代码说明了如何使用EditItemTemplate组件在编辑模式下生成内容

然后通过SqlDataSource更新数据库

首先你设置SqlDataSource的UpdateCommand属性这样SQL语句就会用由用户指定的最新值执行数据库更新操作

ConnectionString=

SelectCommand=SELECT [DepartmentID][Name][GroupName] FROM

HumanResourcesDepartment UpdateCommand=UPDATE

HumanResourcesDepartment SET Name = @Name

GroupName = @GroupName WHERE DepartmentID = @DepartmentID>

接下来在ItemTemplate组件中指定编辑项目的连接用户

CommandName=Edit />

然后指定EditItemTemplate声明用户输入更新的部门名称或组名的文本框以及提交或取消当前操作的用户连接

Text=

MaxLength= />

CommandName=Update Text=Update />

CommandName=Cancel Text=Cancel />

这里通过CommandName属性定义的LinkButton的行为如表所示

LinkButton CommandName属性值列出了ListView控件支持的CommandName属性值

描述

Cancel

取消当前操作

Delete

从数据源删除当前选中的项目

Edit

切换ListView到编辑模式显示EditItemTemplate组件中指定的内容

Insert

作为一条新记录将数据保存到数据源

Update

用指定的值更新数据源

在更新结束后ListView控件激活一个OnItemUpdated事件你可以用它向用户提供执行的状态在清单的代码中ListView控件处理两个事件

OnItemUpdated正如名字所暗示的那样这个事件允许你在更新操作完毕后执行一个自定义的程序在前面的代码中这个事件被用于通知用户影响的记录条数

OnPagePropertiesChanged当页面属性发生改变时ListView控件激活这个事件前面代码中使用这个事件清除了在lable标记包括的文本

如果你导航到该页面你会看到如图所示的页面

在运转中编辑ListView配置ListView控件为每条记录显示一个编辑连接点击编辑连接切换到编辑模式

当你点击了编辑(Edit)超链接后ListView控件使用EditItemTemplate显示文本框用户就可以编辑文本框中的内容了如图所示

编辑模式在编辑模式下EditItemTemplate组件产生文本框用户可以在这里输入要更新的值

注意在编辑模式下右边的更新(Update)和取消(Cancel)链接当你点更新链接就会将所做的改变保存到数据库中代码使用了OnItemUpdated事件显示更新操作所影响的行数如图所示

影响的记录更新结束时显示更新操作影响的数据行数

以上就是ListView的全部关键特性了同时你也看到了一个使用ListView控件的简单以数据驱动的示例web页面以及更复杂的更新功能最后描述了如何使用ListView控件产生的事件正如你看到的ListView控件扩展了运行时自定义的特性更加适合你的需要

               

上一篇:用VS.NET中的测试工具测试ASP.NET程序

下一篇:ASP.NET中实现MSN通知消息功能