您的位置:首页 > 编程语言 > ASP

《Programming ASP.NET》学习笔记(DataList控件)

2007-07-19 09:06 399 查看
DataList控件

DataList控件用于创建模板化的列表数据。
可以在一个模板化列表中,通过设置模板来控制呈现该列表的HTML。
模板描述如何显示列表中的某一项的HTML。

提示:DataList控件提供了一些简单的模板。
如果需要精确控制布局,可以考虑使用Repeater控件

DataList控件模板
模板名 说明
ItemTemplate 必须定义。每一项的内容和布局的默认定义
AlternatingItemTemplate 为每一个间隔项提供内容和布局(默认为ItemTemplate)
EditItemTemplate 为当前正在编辑的项提供内容和布局(默认为ItemTemplate)
SelectedItemTemplate 为当前选中的行提供内容和布局(默认为ItemTemplate)
FooterTemplate 为页脚提供内容和布局
HeaderTemplate 为标题提供内容和布局
SeparatorTemplate 为项与项之间的分隔符提供内容和布局

新建DataList控件,选择数据源,设置完成后,DataList将被表示字段名称和绑定到数据控件的Label填充
例如:
<asp:DataList ID="DataList1" runat="server" DataKeyField="id" DataSourceID="SqlDataSource1">

在DataList的开闭标签之间包括一个<ItemTempdate>标签
该标签定义了每一项应该如何显示。
在默认的<ItemTemplate>标签中,用Literal控件表示每个列,用Label控件表示绑定的值
这些Label控件的Text属性使用Eval方法传入数据中的列名创建
例如:
<asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>'></asp:Label>
提示:Eval返回的是传入的列名所对应的列数据的值。

改善控件外观
1 使用控件的“自动套用格式”,使用原有的模板
2 使用控件的“模板编辑”,编辑现有模板,自定义样式
3 在源视图中编写代码

列布局
默认情况下,每个项是一个接着一个显示的,位于一个垂直的列中。
通过设置RepeatDirection和RepeatColumns属性可设置布局

未从WebControl类继承的DataList控件属性
属性 说明
Caption 作为HTML caption元素显示的文本
CaptionAlign 指定caption元素的放置位置
CellPadding 单元格内容和边框之间的像素数
CellSpacing 单元格之间的像素数
DataKeyField 指定数据源中的键字段
DataKeys 每条记录的键值的集合
DataMember 设定多成员数据源中的数据成员
DataSource 为控件设置数据源
EditItemIndex 编辑的行,从零开始的行索引
EditItemStyle 目前选中的编辑行的样式
FooterStyle 页脚部分的样式属性
GridLines 设置显示哪些网格线。默认值为None
HeaderStyle 标题部分的样式属性
Items 控件中的所有项的集合
ItemStyle 控件中每个项的默认样式属性
RepeatColumns 设置显示的列数
RepeatDirection 获取或设置 DataList 控件是垂直显示还是水平显示
RepeatLayout 获取或设置控件是在表中显示还是在流布局中显示
SelectedIndex 获取或设置 DataList 控件中的选定项的索引
SelectedItem 返回当前选中的项
SelectedItemStyle 控件中选中项的默认样式属性
SelectedValue 返回当前的选中项
SeparatorStyle 项与项之间的分隔符的默认样式属性
ShowFooter 是否显示页脚,默认值为true
ShowHeader 是否显示标题行,默认值为true

DataList控件的事件
事件 说明
DataBinding 当控件绑定到数据源时触发(继承自Control)
DeleteCommand 当单击“Delete”按钮时触发
EditCommand 当单击“Edit”按钮时触发
Init 当控件初始化时触发(继承自Control)
ItemCommand 当单击控件中的一个按钮时触发
ItemCreated 在控件中的所有行创建完毕后触发
ItemDataBound 当绑定数据时触发
PreRender 在控件呈现在页面上之前触发(继承自Control)
UpdateCommand 当单击“Update”按钮时触发



编辑DataList控件的项

DataList控件支持就地编辑项。

1 向DataList控件中添加一个EditItemTemplate
手动添加:复制整个ItemTemplate,然后把ItemTemplate改为EditItemTemplate,并用Textbox替代Label(一般应根据实际情况选取控件)
例如:
<EditItemTemplate>
id:
<asp:Textbox ID="idLabel" runat="server" Text='<%# Eval("id") %>'></asp:Textbox>
....
</EditItemTemplate>

2 提供一种进入编辑模式的方式
最简单的方式是向ItemTemplate添加一个按钮,触发EditCommand事件
例如:
<EditItemTemplate>
id:
<asp:Textbox ID="idLabel" runat="server" Text='<%# Eval("id") %>'></asp:Textbox>
....
<asp:Button ID="ItemEditButton" runat="server" Text="编辑" CommandName="edit"/>
</EditItemTemplate>

3 创建EditCommand事件处理程序
第二个参数是一个DataListCommandEventArgs对象
DataListCommandEventArgs包含了一个Item属性,该属性表示用户须修改的列表项。
由Item属性返回的DataListItem有一个ItemIndex属性列表示表项索引
使用这些属性来重新绑定DataList
例如:
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = e.Item.ItemIndex;
DataBind();
}

4 在EditItemTemplate中添加“保存”和“取消”按钮
“保存”和“取消”按钮将分别触发UpdateCommand和CancelCommand事件
例如:
<EditItemTemplate>
id:
<asp:Textbox ID="idLabel" runat="server" Text='<%# Eval("id") %>'></asp:Textbox>
....
<asp:Button runat="server" ID="ItemSaveButton" Text="保存" CommandName="update" />
<asp:Button runat="server" ID="ItemCancelButton" Text="取消" CommandName="cancel" />
</EditItemTemplate>

5 创建UpdateCommand和CancelCommand事件处理程序



删除DataList控件的项

1 向ItemTemplate添加一个“删除”按钮
例如:
<asp:Button ID="ItemDeleteButton" runat="server" Text="删除" CommandName="delete" />

2 添加另一个数据源控件以便处理Delete命令
添加一个数据源控件(SqlDataSource2),编辑DeleteQuery属性来设置“Delete”命令,弹出“命令和参数编辑器”
输入删除命令:
delete from cloud where id = @id
或者用查询生成器生成
然后点击“刷新参数”自动添加参数,也可以自己添加(不需要@符号作为参数一部分)

此时新SqlDataSource对象的源代码可能如下:
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString2 %>"
DeleteCommand="DELETE FROM cloud WHERE (id = @id)"
SelectCommand="SELECT * FROM [cloud]">
<DeleteParameters>
<asp:Parameter Name="id" />
</DeleteParameters>
</asp:SqlDataSource>
提示:将DataList控件的DataKeyField属性设置为将要删除记录的表的主键

3 创建DeleteCommand事件处理程序
DeleteCommand事件处理程序
例如:
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
string recordID = ( DataList1.DataKeys[e.Item.ItemIndex] ).ToString( );
System.Web.UI.WebControls.Parameter param = SqlDataSource2.DeleteParameters["id"];
param.DefaultValue = recordID;
SqlDataSource2.Delete( );
DataBind( );
}

说明:
1 根据选中的记录(Delete按钮被按下的记录)获得记录的ID
DataKeys属性获取DataKeyCollection对象,它存储数据列表控件中每个记录的键值
应该设置了DataList的DataKeyField属性为主键,这样获取的DataKeyCollection对象就只包含主键的列(这里只需要这个主键),最后获得主键id的字符串表达方式
2 从新数据源对象的Parameters集合中获得参数
通过索引从DeleteParameters属性中获得名称为id的参数引用
3 设置参数的DefaultValue为要删除记录的ID
4 调用数据源的Delete
5 重新绑定DataList
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: