-
1 任务六 使用D...
-
2 补充知识
使用DataSet
通过任务六学习,你需要掌握和了解以下内容:
1.掌握DataList控件使用
2.掌握GridView控件使用
3.利用两个控件完成列表增删改查功能
【任务要点】
DataList控件可以在一个重复列表中显示数据项,并且还可以支持选择和编辑项目。可使用模板对显示的数据进行排版。
【案例一】
制作显示最新上架商品主要信息的页面

图6-1
【具体步骤】
(1)在YiZeShop中,新建了一个名为Default.aspx的Web窗体。
(2)打开Default.aspx窗体,在窗体中新建一个两行一列的表格。
(3)在窗体的设计视图下将DataList控件从工具箱中拖到布局表格的第二行中,更改ID为dlstNewProducts,设置RepeatColumns为5。此时效果如图6-2所示。

图6-2
(4)选中新添加的DataList并右击,弹出的快捷菜单如图6-3所示。此时选择【编辑模板】【项模板】命令。选择编辑模板后页面图如图6-4所示。

图6-3

图6-4
(5)在ItemTemplate中插入布局表格,如图6-5所示。

图6-5
(6)在ItemTemplate中布局表格的第一行插入一个Image控件,将ID改为imgProduct,并调整Image控件大小。
在第二行绑定数据库字段ProName。在第三行的第一列插入文字“市场价:”,在第二列绑定数据库字段MarketPrice和文字“元”。在第四行的第一列插入文字“会员价:”,在第二列绑定数据库字段MemberPrice和文字“元”。
在第五行的第一列插入一个ImageButton控件更改ID为ibtnBuy。
在第二列插入查看详细a标签,并为其加链接为show.aspx?id=<%#Eval("ProId")%>。

图6-6
(8)下面来完成控件的属性设置及数据邦定:在ItemTemplate中的布局表格里添加控件。

图6-7
(10)添加窗体的Page_Load()方法

(11)添加dlstNewProducts的ItemCommand事件,在编辑模板的时候为购买商品按钮链接添加了命令名称为“Buy”。该事件就是根据这个命令执行对应的操作。
![]()

【背景知识】
DataList控件
(1)DataList控件的基本语法如下:
<asp:DataList ID=”DataList1”runat=”server”
RepeatDirection=""
RepeatColumns=""
RepeatLayout=""
DataKeyField=""
OnEditCommand=""
OnCancelCommand=""
OnDeleteCommand=""
OnUpdateCommand=""
OnItemCommand="">
模板列
</asp:DataList>
(2)在DataList控件中,ASP.NET也提供了7种模板列用来定义数据显示的内容和布局,具体参考下表。

(3)在DataList中创建多列:DataList的一个好处是可以以多个列显示数据项。通过设置其RepeatColumns和RepeatDirection属性,可以控制DataList的列的布局。
(4)捕获DataList控件中产生的事件
(5)选择DataList中的项
(6)使用DataList控件中的DataKeys集合
(7)编辑DataList中的项
【任务要点】
使用GridView控件制作数据列表。
【案例二】
制作新闻管理列表页面
新建NewsManagement项目,在项目中新建Web空窗体实现新闻列表的呈现:分页、时间降序、新闻标题截取。

图6-8
【具体步骤】
(1)在NewsManagement项目下新建新建Web窗体NewsList.aspx。

(3)修改控件属性,添加数据项
(4)在数据库添加假数据
(5)在后台编码,创建DataLoad()函数,用于加载数据列表,代码如下所示:

(6)新建一个过程完成GridView1的数据邦定。在代码页新建一个数据邦定过程。
(7)编写完成数据操作的过程,根据传入参数SQL语句对数据进行操作。
(8)添加btnSearch按钮的Click事件并编写代码完成新闻的搜索。

(9)添加GridView1的RowDeleting事件,并编写代码实现记录删除功能。

(10)添加GridView1的PageIndexChanging事件,并编写代码实现记录分页显示功能。

(11)添加GridView1的RowEditing事件,并编写代码实现记录编辑功能。

(12)添加GridView1的RowDataBound事件,并编写代码实现标题截取功能。
【背景知识】
GridView控件
一、方法:DataBind
它是很简单、最常用的方法。用于绑定数据。需要注意的只有一点:执行了这个方法后,GridView(由于GridView和DataList极为相似,所以下面的介绍虽然是针对GridView,但与DataList也相差不远)里面所有的显示绑定数据的控件,都会显示DataSource里的数据,其余控件也将初始化成.aspx里设计的状态。
二、属性
1.DataSource
有DataBind的地方,就应该有DataSource。如果没有指定DataSource而执行DataBind,那GridView将什么也不会显示。
DataSource一般是DataSet、DataTable或者DataView。当然也可以绑定DataReader或者其他实现IEnumerable的类。
2.DataKeyField,DataKeys
在GridView中定位一行之后,如果想知道这行在数据表里的位置,至少有五种方法可以做到这一点,设置GridView的DataKeyField就是这几种方法之一。
3.EditItemIndex,SelectedIndex,CurrentPageIndex,SelectedItem
这些属性看名字就能理解其意义,需要注意的是,设置了EditItemIndex或者CurrentPageIndex后需要重新执行DataBind方法(前面提到过,还需要设置DataSource)。
4.Columns
Columns就是Column列的集合,可以设置列的属性,包括Visible、HeaderText、FooterText、SortExpression等。
5.Items
Items是GridViewItem的集合,可以遍历当前GridView中显示数据的GridViewItem
GridViewItem
每一个GridViewItem就是GridView中显示的一行,其中包括:
HeaderGridView控件的标题部分
ItemGridView控件中的项
AlternatingItemGridView控件中的交替项nSelectedItemGridView控件中的选定项(由SelectedIndex设置,通过SelectedItem属性或者Items[SelectedIndex]来读取)
EditItemGridView控件中处于编辑状态的项(由EditItemIndex设置,通过Items[EditItemIndex]来读取)
Separator GridView控件中项之间的分隔符
Footer GridView控件的脚注部分Pager GridView控件的页选择节
下面介绍GridViewItem的属性。
ItemIndex——得到行在Items中的索引。
ItemType——返回行的类型,也就是上面列出的Header、Item、Pager。
Cells——返回行包含的所有TableCell(不管是显示声明的,还是自动生成的;不管是可以看见的,还是隐藏掉的),通过TableCell,可以读取Cell中显示的文本、包含的控件。
三、事件
1.ItemCommand、CancelCommand、DeleteCommand、EditCommand、UpdateCommand也就是在GridView中,单击Button、LinkButton后执行的事件,执行的事件取决于按钮的CommandName。其实最主要的一个是ItemCommand,而后面四个都只是ItemCommand的一小部分,比如一个按钮的CommandName为“Cancel”,当返回后,首先执行的是ItemCommand事件,然后才是CancelCommand事件。
2.PageIndexChanged
如果GridView是分页的,那在GridView上单击Pager上的1、2、3或者<、>时,就会激发这个事件。在这个事件里面,可以用e.NewPageIndex来读取要改变的页,然后赋值给GridView的CurrentPageIndex属性,最后要记得设置DataSource和执行DataBind。
3.ItemDataBound,ItemCreated
首先要说的是这两个事件的发生时间。只要执行了DataBind方法,就会马上激发ItemDataBound事件。如果页面是第一次访问(Page.IsPostBack=false),那在第一次执行DataBind的时候,会先激发ItemCreated事件,也就是说,执行了DataBind后,首先会用ItemCreated来建立Header行,然后用ItemDataBound来绑定Header行,再用ItemCreated来建立第一行,再调用ItemDataBound来绑定第一行,也就是说ItemCreated和ItemDataBound是交替执行的。页面返回时,在Page_Load之前,也会执行ItemCreated事件,但是这时候就不会再执行ItemDataBound事件了。所以,如果想在GridView里动态添加什么控件,就需要在ItemCreated事件中执行,而不是在ItemDataBound事件中。





