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

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 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值