DataList Web 服务器控件以某种格式显示数据,这种格式可以使用模板和样式进行定义。DataList 控件对于显示数据行很有用。可以选择将 DataList 控件配置为允许用户编辑或删除信息。还可以自定义该控件以支持其他功能,如选择行。注意 若要精确地控制用于呈现列表的 HTML,请使用 Repeater Web 服务器控件。如果要包括自动分页和排序功能,请使用 DataGrid Web 服务器控件。有关更多信息,请参见在 Web 页上显示列表的控件。 DataList 控件将数据行显示为列表中的项。可通过包括 HTML 文本和控件,使用模板定义项的布局。例如,可以在项中使用 Label Web 服务器控件显示数据源的字段。下面的章节介绍 DataList 控件的功能。将数据绑定到控件 必须将 DataList 控件绑定到数据源。DataList 的典型数据源是数据集和数据读取器(OleDbDataReader 或 SqlDataReader 对象)。可以使用能够从工具箱添加到页的数据源,如 DataSet 或 DataView 类。还可绑定到在代码中创建的数据源,如数据读取器或数组。控件可以将任何支持 IEnumerable 接口的类用作数据源。当数据绑定时,可以为 DataList 控件整体指定一个数据源。在给此控件添加其他控件(例如,列表项中的标签或文本框)时,您还可以依次将它们绑定到容器,即 DataList 控件。有关更多信息,请参见 Web 窗体页中的数据访问。控件布局的模板 在 DataList 控件中,使用模板定义信息的布局。注意 有关使用模板的概述,请参见 Web 服务器控件模板。 具体请看ms-help://MS.MSDNQTR.2003FEB.2052/vbcon/html/vbconIntroductionToDataListWebControl.htm
数据列表 DataList 数据列表显示跟重复列表(Repeator)比较类似,但是它可以选择和修改数据项的内容。数据列表的数据显示和布局也如同重复列表都是通过“模板”来控制的。同样的,模板至少要定义一个“数据项模板”(ItemTemplate)来指定显示布局。数据列表支持的模板类型更多,它们如下: 1) ItemTemplate模板,数据项模板,必需的,它定义了数据项极其表现形式。 2) AlternatingItemTemplate模板,,数据项交替模板,为了使相邻的数据项能够有所区别,可以定义交替模板,它使得相邻的数据项看起来明显不同,缺省情况下,它和ItemTemplate模板定义一致,即缺省下相邻数据项无表示区分。 3) SeparatorTemplate模板,分割符模板,定义数据项之间的分割符。 4) SelectedItemTemplate模板,选中项模板,定义被选择的数据项的表现内容与布局形式,当未定义”SelectedItemTemplate”模板时,选中项的表现内容与形式无特殊化,由ItemTemplate模板定义所决定。 5) EditItemTemplate模板,修改选项模板,定义即将被修改的数据项的显示内容与布局形式,缺省情况下,修改选项模板就是数据项模板(ItemTemplate)的定义。 6) HeaderTemplate模板,报头定义模板,定义重复列表的表头表现形式。 7) FooterTemplate模板,表尾定义模板,定义重复列表的列表尾部的表现形式。 数据列表还可以通过风格形式来定义模板的字体、颜色、边框。每一种模板都有它自己的风格属性。例如,可以通过设置修改选项模板的风格属性来指定它的风格。 此外,还有一些其他属性可以导致数据列表的显示有较大的改变,下面择重说明。 RepeatLayout:显示布局格式,指定是否以表格形式显示内容。 RepeatLayout.Table指定布局以表格形式显示。 RepeatLayout.Flow指定布局以流格式显示,即不加边框。 RepeatDirection:显示方向,指定显示是横向显示还是纵向显示 RepeatDirection.Horizontal指定是横向显示 RepeatDirection.Vertical指定是纵向显示 RepeatColumns:一行显示列数,指定一行可以显示的列数,缺省情况下,系统设置为一行显示一列。这里需要注意的是,当显示方向不同时,虽然一行显示的列数不变,但显示的布局和显示内容的排列次序却有可能大不相同。 例如:有10个数据需要显示,RepeatColumns设定为4,即一行显示4列时 当RepeatDirection=RepeatDirection.Horizontal横向显示时,显示布局如下: Item1 Item2 Item3 Item4 Item5 Item6 Item7 Item8 Item9 Item10 当RepeatDirection=RepeatDirection.Vertical纵向显示时,显示布局如下: Item1 Item4 Item7 Item10 Item2 Item5 Item8 Item3 Item6 Item9 BorderWidth:当RepeatLayout=RepeatLayout.Table即以表格形式显示时,边框的线宽度 Unit.Pixel(x) x>=0,当x为0时无边框 GridLines: 当RepeatLayout=RepeatLayout.Table以表格形式显示时,在表格当中是否有网隔线分离表格各单元。 GridLines=GridLines.Both,有横向和纵向两个方向的分割线。 GirdLines=GridLines.None,无论横向还是纵向均无分割线。例子:演示以上介绍的各属性的设置对数据列表输出的影响,并且当数据项被选中时,数据项以粉红色来反显。1.源程序(DataList.aspx) <!--源文件:form\ServerControl\dataList.aspx--> <%@ Import Namespace="System.Data" %> <html> <script language="VB" runat="server"> '创建初始化表和载入实验数据 Function LoadData() As ICollection Dim dt As DataTable Dim dr As DataRow Dim i As Integer '创建数据表 dt = New DataTable '建立数据项结构 dt.Columns.Add(New DataColumn("Content", GetType(String))) '载入10个实验数据 For i = 1 To 10 dr = dt.NewRow() dr(0) = "Info " & i.ToString() dt.Rows.Add(dr) Next '为数据表建立一个数据视图,并将其返回 LoadData = New DataView(dt) End Function Sub Page_Load(s As Object, e As EventArgs) If Not IsPostBack Then DataList1.DataSource = LoadData() DataList1.DataBind End If End Sub Sub DataList1_ItemCommand(s As Object, e As DataListCommandEventArgs) Dim cmd As String = e.CommandSource.CommandName If cmd = "select" Then DataList1.SelectedIndex = e.Item.ItemIndex End If
DataList1.DataSource = LoadData() DataList1.DataBind End Sub '当刷新按钮按下后,对数据列表属性重新设置 Sub RefreshBtn_Click(s As Object, e As EventArgs) If lstDirection.SelectedIndex = 0 DataList1.RepeatDirection = RepeatDirection.Horizontal Else DataList1.RepeatDirection = RepeatDirection.Vertical End If If lstLayout.SelectedIndex = 0 DataList1.RepeatLayout = RepeatLayout.Table Else DataList1.RepeatLayout = RepeatLayout.Flow End If If chkBorder.Checked And DataList1.RepeatLayout = RepeatLayout.Table Then DataList1.BorderWidth = Unit.Pixel(1) Else DataList1.BorderWidth = Unit.Pixel(0) End If
DataList 控件将数据行显示为列表中的项。可通过包括 HTML 文本和控件,使用模板定义项的布局。例如,可以在项中使用 Label Web 服务器控件显示数据源的字段。下面的章节介绍 DataList 控件的功能。将数据绑定到控件
必须将 DataList 控件绑定到数据源。DataList 的典型数据源是数据集和数据读取器(OleDbDataReader 或 SqlDataReader 对象)。可以使用能够从工具箱添加到页的数据源,如 DataSet 或 DataView 类。还可绑定到在代码中创建的数据源,如数据读取器或数组。控件可以将任何支持 IEnumerable 接口的类用作数据源。当数据绑定时,可以为 DataList 控件整体指定一个数据源。在给此控件添加其他控件(例如,列表项中的标签或文本框)时,您还可以依次将它们绑定到容器,即 DataList 控件。有关更多信息,请参见 Web 窗体页中的数据访问。控件布局的模板
在 DataList 控件中,使用模板定义信息的布局。注意 有关使用模板的概述,请参见 Web 服务器控件模板。
具体请看ms-help://MS.MSDNQTR.2003FEB.2052/vbcon/html/vbconIntroductionToDataListWebControl.htm
数据列表显示跟重复列表(Repeator)比较类似,但是它可以选择和修改数据项的内容。数据列表的数据显示和布局也如同重复列表都是通过“模板”来控制的。同样的,模板至少要定义一个“数据项模板”(ItemTemplate)来指定显示布局。数据列表支持的模板类型更多,它们如下:
1) ItemTemplate模板,数据项模板,必需的,它定义了数据项极其表现形式。
2) AlternatingItemTemplate模板,,数据项交替模板,为了使相邻的数据项能够有所区别,可以定义交替模板,它使得相邻的数据项看起来明显不同,缺省情况下,它和ItemTemplate模板定义一致,即缺省下相邻数据项无表示区分。
3) SeparatorTemplate模板,分割符模板,定义数据项之间的分割符。
4) SelectedItemTemplate模板,选中项模板,定义被选择的数据项的表现内容与布局形式,当未定义”SelectedItemTemplate”模板时,选中项的表现内容与形式无特殊化,由ItemTemplate模板定义所决定。
5) EditItemTemplate模板,修改选项模板,定义即将被修改的数据项的显示内容与布局形式,缺省情况下,修改选项模板就是数据项模板(ItemTemplate)的定义。
6) HeaderTemplate模板,报头定义模板,定义重复列表的表头表现形式。
7) FooterTemplate模板,表尾定义模板,定义重复列表的列表尾部的表现形式。
数据列表还可以通过风格形式来定义模板的字体、颜色、边框。每一种模板都有它自己的风格属性。例如,可以通过设置修改选项模板的风格属性来指定它的风格。
此外,还有一些其他属性可以导致数据列表的显示有较大的改变,下面择重说明。
RepeatLayout:显示布局格式,指定是否以表格形式显示内容。
RepeatLayout.Table指定布局以表格形式显示。
RepeatLayout.Flow指定布局以流格式显示,即不加边框。
RepeatDirection:显示方向,指定显示是横向显示还是纵向显示
RepeatDirection.Horizontal指定是横向显示
RepeatDirection.Vertical指定是纵向显示
RepeatColumns:一行显示列数,指定一行可以显示的列数,缺省情况下,系统设置为一行显示一列。这里需要注意的是,当显示方向不同时,虽然一行显示的列数不变,但显示的布局和显示内容的排列次序却有可能大不相同。
例如:有10个数据需要显示,RepeatColumns设定为4,即一行显示4列时
当RepeatDirection=RepeatDirection.Horizontal横向显示时,显示布局如下:
Item1 Item2 Item3 Item4
Item5 Item6 Item7 Item8
Item9 Item10
当RepeatDirection=RepeatDirection.Vertical纵向显示时,显示布局如下:
Item1 Item4 Item7 Item10
Item2 Item5 Item8
Item3 Item6 Item9
BorderWidth:当RepeatLayout=RepeatLayout.Table即以表格形式显示时,边框的线宽度
Unit.Pixel(x) x>=0,当x为0时无边框
GridLines: 当RepeatLayout=RepeatLayout.Table以表格形式显示时,在表格当中是否有网隔线分离表格各单元。
GridLines=GridLines.Both,有横向和纵向两个方向的分割线。
GirdLines=GridLines.None,无论横向还是纵向均无分割线。例子:演示以上介绍的各属性的设置对数据列表输出的影响,并且当数据项被选中时,数据项以粉红色来反显。1.源程序(DataList.aspx)
<!--源文件:form\ServerControl\dataList.aspx-->
<%@ Import Namespace="System.Data" %>
<html>
<script language="VB" runat="server">
'创建初始化表和载入实验数据
Function LoadData() As ICollection
Dim dt As DataTable
Dim dr As DataRow
Dim i As Integer
'创建数据表
dt = New DataTable
'建立数据项结构
dt.Columns.Add(New DataColumn("Content", GetType(String)))
'载入10个实验数据
For i = 1 To 10
dr = dt.NewRow()
dr(0) = "Info " & i.ToString()
dt.Rows.Add(dr)
Next
'为数据表建立一个数据视图,并将其返回
LoadData = New DataView(dt)
End Function
Sub Page_Load(s As Object, e As EventArgs)
If Not IsPostBack Then
DataList1.DataSource = LoadData()
DataList1.DataBind
End If
End Sub
Sub DataList1_ItemCommand(s As Object, e As DataListCommandEventArgs)
Dim cmd As String = e.CommandSource.CommandName If cmd = "select" Then
DataList1.SelectedIndex = e.Item.ItemIndex
End If
DataList1.DataSource = LoadData()
DataList1.DataBind
End Sub
'当刷新按钮按下后,对数据列表属性重新设置
Sub RefreshBtn_Click(s As Object, e As EventArgs)
If lstDirection.SelectedIndex = 0
DataList1.RepeatDirection = RepeatDirection.Horizontal
Else
DataList1.RepeatDirection = RepeatDirection.Vertical
End If If lstLayout.SelectedIndex = 0
DataList1.RepeatLayout = RepeatLayout.Table
Else
DataList1.RepeatLayout = RepeatLayout.Flow
End If
If chkBorder.Checked And DataList1.RepeatLayout = RepeatLayout.Table Then
DataList1.BorderWidth = Unit.Pixel(1)
Else
DataList1.BorderWidth = Unit.Pixel(0)
End If
If chkGridLines.Checked And DataList1.RepeatLayout = RepeatLayout.Table then
DataList1.GridLines = GridLines.Both
Else
DataList1.GridLines = GridLines.None
End If
DataList1.RepeatColumns=lstColsPerLine.SelectedIndex + 1
End Sub
</script>
<head>
<title>
数据列表实验
</title>
</head>
<body>
<center>
<h2>
数据列表属性方法实验
</h2>
<form runat=server>
<font face="Verdana" size="-1">
<asp:DataList id="DataList1" runat="server"
BorderColor="black"
CellPadding="3"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#aaaadd"
AlternatingItemStyle-BackColor="#ccccff"
SelectedItemStyle-BackColor="#ffccff"
OnItemCommand="DataList1_ItemCommand"
>
<template name="HeaderTemplate">
<h><center>内容</center></h>
</template>
<template name="ItemTemplate">
<asp:LinkButton id="DetailBtn" runat="server" Text="详细" CommandName="select" />
<%# DataBinder.Eval(Container.DataItem, "Content") %>
</template>
<template name="SelectedItemTemplate">
<%# DataBinder.Eval(Container.DataItem, "Content") %>已经被选中
</template>
</asp:DataList>
<p>
<hr>
显示方向:
<asp:DropDownList id=lstDirection runat="server">
<asp:ListItem>横向</asp:ListItem>
<asp:ListItem>纵向</asp:ListItem>
</asp:DropDownList>
布局类型:
<asp:DropDownList id=lstLayout runat="server">
<asp:ListItem>表方式</asp:ListItem>
<asp:ListItem>流方式</asp:ListItem>
</asp:DropDownList>
一行列数:
<asp:DropDownList id=lstColsPerLine 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>
边框显示:
<asp:CheckBox id=chkBorder runat="server" />
网格显示:
<asp:CheckBox id=chkGridLines runat="server" />
<p>
<asp:Button id=RefreshBtn Text="刷新界面" OnClick="RefreshBtn_Click" runat="server"/>
</font>
</form>
</center>
</body>
</html>