ASP.NET中DataList控件
DataList控件
DataList控件可用于创建模板化的列表数据,可以显示诸如一行中有多列的内容,可用于任何重复结构中的数据,如表格。
1、DataList控件的模板
AlternatingItemTemplate为每一个间隔项提供内容和布局。如果没有定义,在DataList中将为每一项使用ItemTemplate;
EditItemTemplate为当前正在编辑的项提供内容和布局。如果没有定义,在DataList中将为正在编辑的项使用ItemTemplate;
FooterTemplate为页脚提供内容和布局,如果没有定义,DataList将不会有页脚;
HeaderTemplate为标题提供内容和布局,如果没有定义,DataList将不会有标题行;
ItemTemplate必须定义,每一项的内容和布局的默认定义;
SelectedItemTemplate为当前选中的行提供内容和布局,如果没有定义,ItemTemplate将被使用;
SeparatorTemplate为项与项之间的分隔符提供内容和布局,如果没有定义,将不会使用分隔符。
2、DataList控件的常用属性和事件
Caption作为HTML caption元素显示的文本;
CellPadding单元格内容和边框之间的像素数;
CellSpacing单元格之间的像素数;
DataKeyField指定数据源中的键字段;
DataKeys每条记录的键值的集合;
DataMember设定多成员数据源中的数据成员;
DataSource为控件设置数据源;
EditItemIndex编辑的行,从零开始的行索引。如果没有项被编辑或者清除对某项的选择,设置值为-1;
Items控件中的所有项的集合;
RepeatColumns设置显示的列数;
RepeatDirection如果为Horizontal,项是从左到右,然后从上到下显示,如果是Vertical,项是从上到下,然后从左到右显示的。默认值为Vertical;
SelectedIndex当前选中的项的索引,从0开始,如果没有选中任何项,或者清除对某项的选择,将值设置为-1;
SelectedItem返回当前选中的项;
SelectedValue返回当前的选中项;
ShowFooter是否显示页脚,默认值为True,仅当FooterTemplate不为null时有效;
ShowHeader是否显示标题行,默认值为true,仅当HeaderTemplate不为null时有效;
DataList控件的常用事件
DataBinding当控件绑定到数据源时触发(继承自Control);
DeleteCommand当单击“Delete”按钮时触发;
EditCommand当单击“Edit”按钮时触发;
Init当控初始化时触发( 继承自Control);
ItemCommand当单击控件中的一个按钮时触发;
ItemCreated当控件中的所有行创建完毕后触发;
ItemDataBound当绑定数据时触发;
PreRender在控件呈现在页面上之前触发(继承自Control);
UpdateCommand当单击“Update”按钮时触发。
3、使用方法
首先,创建一个页面,把DataList控件拖到表单中。
<asp:Label ID="TitleLabel" runat="server" Text='<%# Eval("Title") %>' />
4、实现DataList控件的编辑功能
DataList控件没有内置编辑等功能,如果要实现编辑,我们需要自己编写代码控制,为了实现编辑功能,我们要在页面中使用编辑模板。
首先,设置编辑按钮的属性,可以设置“编辑”按钮的“CommandName”属性设置为“edit”,然后就可以DataList控件的EditCommand事件。双击EditCommand事件,在生成的事件代码中编写代码如下:
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = e.Item.ItemIndex;
DataBind();
}
修改和取消的思路与编辑按钮的思路完全一致:分别为修改和取消的按钮对应的CommandName属性设置为:update和Cancel,然后编写UpdateCommand事件和CancelCommand事件的对应的事件代码。
取消的操作代码:
protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = -1;
DataBind();
}
更新的操作代码:
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{
//从选中记录中获取各更新参数的值
SqlDataSource1.UpdateParameters["ID"].DefaultValue = ((TextBox)e.Item.FindControl("TextBox1")).Text;
SqlDataSource1.UpdateParameters["Title"].DefaultValue = ((TextBox)e.Item.FindControl("TextBox2")).Text;
SqlDataSource1.UpdateParameters["Price"].DefaultValue = ((TextBox)e.Item.FindControl("TextBox3")).Text;
SqlDataSource1.UpdateParameters["Images"].DefaultValue = ((TextBox)e.Item.FindControl("TextBox4")).Text;
//提交更新
SqlDataSource1.Update();
//设置到浏览状态
DataList1.EditItemIndex = -1;
//重新绑定
DataBind();
}
5、DataList控件的分页
DataList控件没有内置分页和排序的功能,需要编写代码手工实现。
分页一般需要以下条件:
(1)、每页显示记录数(PageSize)
(2)、总记录数(Count)
(3)、总页数
(4)、当前页
基于PagedDataSource类的分页,常见属性:
CurrentPageIndex当前页;
PageCount总页数;
Count总记录数;
PageSize每页记录数;
DataSource 数据源;
AllowPaging控件是否实现自动分页功能。
只要将数据源和当前页数赋值给PagedDataSource类的实例对象,其它属性(总记录数和总页数)可以自动计算得出。
编写绑定的方法如下:
private void Databind()
{
PagedDataSource pds = new PagedDataSource();
pds.DataSource = Product.GetProducts(); //获得记录集的方法
pds.AllowPaging = true; //允许分页
pds.PageSize = 4; //页大小
pds.CurrentPageIndex = Page; //当前页
Label1.Text = "第" + (pds.CurrentPageIndex + 1).ToString() + "页共" + pds.PageCount.ToString() + "页";
DataList1.DataSource = pds;
DataList1.DataBind();
}