DataList是ASP.NET的数据控件之一,在使用时要对其进行数据绑定。但是使用过程中难免会出现需要根据已绑定表中的某列数据来作进一步的查询和显示,就需要使用DataList嵌套来解决此类问题。
举例:
1.要显示一张公司的组织结构表,要显示公司所属的不同部门,也要显示各个部门所属的人员。
2.在商品列表中,要根据商品的ID,查询出商品的所有信息,而查询时,在数据库中并不是所有的数据都在同一张表中,要根据商品ID在多张表中查询商品的信息并显示出来。
以上的情况,使用一级DataList是无法完成的,需要使用DataList嵌套。
一、前台代码
<asp:DataList id="ParentList" runat=“server" OnItemDataBound="ParentList_OnItemDataBound"> <ItemTemplate> <%#DataBinder.Eval(Container.DataItem,"parent")%> <asp:DataList id="ChildList" runat=“server"> <ItemTemplate> <%#DataBinder.Eval(Container.DataItem,"child")%> </ItemTemplate> </asp:DataList> </ItemTemplate> </asp:DataList>
二、后台代码
protected void ParentList_OnItemDataBound(object source,DataListItemEventArgs e)
{
DataList ChildList = (DataList)e.Item.FindControl("ChildList"); int id = int.parse(Eval(e.Item.DataItem,"keyword").ToString());
String strSql = "select * from table where id = "
+ id;
/*获取查询结果myds后进行数据绑定*/
ChildList.DataSource = myds;
ChildList.DataBind();
}
三、总结
1.根据ID使用e.Item.FindControl方法在父级DataList中找到要绑定的子级DataList,并强制转换为DataList对象
2.使用Eval(e.Item.DataItem,"keyword")方法获取父级DataList中的某项Item所绑定的keyword列的数据。
3.根据keyword继续查询,绑定子级DataList数据