ASP.NET 2.0:DataList嵌套DataList解决方案
前台代码比较多,主要是绑定的数据比较多吧,里面最重要的一点就是要设置外层DataList的DataKeyField;而且要为外层DataLisy增加OnItemDataBound方法,内层DataList的数据要在其中绑定,这是最重要的。其余代码就是数据绑定了,没什么大的问题。
<asp:Table ID=table1 runat=server Width=100%>
<asp:TableRow>
<asp:TableCell CssClass=title_color>
<font class=title>公共课辅导班</font>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell>
<asp:DataList ID=fdjgDL runat=server Width=100% RepeatDirection=horizontal RepeatColumns=1 DataKeyField=jigouid OnItemDataBound=fdjgDL_OnItemDataBound>
<ItemTemplate>
<asp:Table ID=Table2 runat=server>
<asp:TableRow>
<asp:TableCell HorizontalAlign=center Width=140px>
<asp:HyperLink ID=HyperLink2 runat=server Target=_blank NavigateUrl='<%#~/WebSite/Departs/Depart.aspx?id=+Eval(jigouid) %>'>
<asp:ImageMap ID=logoIM ImageUrl='<%# Eval(logo)%>' runat=server Width=120px Height=80px ></asp:ImageMap></asp:HyperLink>
</asp:TableCell>
<asp:TableCell RowSpan=2><div class=l></div>
//
下面是内层的DataList
<asp:DataList ID=fdbDL runat=server RepeatDirection=horizontal RepeatColumns=1>
<ItemTemplate>
<ul>
<li>
<asp:HyperLink ID=hl_student runat=server Target=_blank NavigateUrl='<%#~/WebSite/Classes/detail.aspx?type=2&id=+Eval(ggkfdbid) %>'><%#Eval(fdbming).ToString().Length > 28 ? Eval(fdbming).ToString().Substring(0, 28) : Eval(fdbming).ToString()%></asp:HyperLink>
</li>
</ul>
<div align=right>
<asp:Label ID=timeLabel runat=server><%# Eval(shijian,{0:MM'月'dd'日'}) %></asp:Label></div>
</ItemTemplate>
</asp:DataList>
</asp:TableCell>
</asp:TableRow>
<asp:TableRow>
<asp:TableCell Width=140px HorizontalAlign=center>
<ul>
<li>
<asp:HyperLink ID=HyperLink1 Font-Size=Medium runat=server Target=_blank NavigateUrl='<%#~/WebSite/Departs/Depart.aspx?id=+Eval(jigouid) %>'><%# Eval(jgming)%></asp:HyperLink>
</li>
</ul>
</asp:TableCell>
</asp:TableRow>
</asp:Table><hr />
</ItemTemplate>
</asp:DataList>
</asp:TableCell>
</asp:TableRow>
</asp:Table>
后台代码绑定就比较简单了,只要每次取得外层DataList的DataKeys,取得内层DataList的数据就可以了,在OnItemDataBound进行操作。
protected void pageBind()
{
DataTable dt=this.depart.ReturnPubAgency().Tables[0];
DataView dv=dt.DefaultView;
this.fdjgDL.DataSource = dv;
this.fdjgDL.DataBind();
}
protected void fdjgDL_OnItemDataBound(object sender, DataListItemEventArgs e)
{
int index = e.Item.ItemIndex;
if (e.Item.ItemType == ListItemType.Item)
{
DataList dl = (DataList)e.Item.FindControl(fdbDL);
string id = this.fdjgDL.DataKeys[index].ToString();
dl.DataSource = this.depart.ReturnPubClass(id, 4);
dl.DataBind();
}
}
效果如图,还是不好看:
===================博客订阅列表=================
===================最新文章列表=================
[toluu]St Louis™ - 生活、学习
[feedsky]St Louis™ - 生活、学习
[feedburner]St Louis™ - 生活、学习




