aspx代码:
<asp:Repeater ID="headlist2" runat="server" OnItemDataBound="headlist2_ItemDataBind">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<ul><!-- 这里是有二级导航的 -->
<li class="second_nav" onMouseOut="unshow_it(this)" onMouseOver="show_it(this)">
<a href="News/list.aspx?id=<%# Eval("id") %>"><%# Eval("catName") %><asp:Image ID="chead" runat="server" ImageUrl="img/33.png" /></a>
<span>
<asp:Repeater ID="clist" runat="server" >
<ItemTemplate>
<a href="News/list.aspx?id=<%# Eval("id") %>"><%# Eval("catName") %></a>
</ItemTemplate>
</asp:Repeater>
</span>
</li>
</ul>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
aspx.cs代码
protected void HeaderBind()
{
DataSet ds = new DataSet();
ds = null;
ds = catImpl.GetCategoryListByCId(2);
if (ds != null)
{
this.headlist2.DataSource = ds.Tables[0];
this.headlist2.DataBind();
}
}
protected void headlist2_ItemDataBind(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rep = e.Item.FindControl("clist") as Repeater;//找到里层的repeater对象
DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项
int typeid = Convert.ToInt32(rowv["id"]); //获取填充子类的id
DataSet d = new DataSet();
d = null;
d= catImpl.GetCategoryListByCId(typeid);
if (d != null)
{
rep.DataSource = d.Tables[0];
rep.DataBind();
}
}
}
怎么根据里层repeater取得的值来设置控件(<asp:Image ID="chead" runat="server" ImageUrl="img/33.png" />)状态(里层repeater取得并绑定数据时显示Image图片控件,否则就不显示图片)?求解?
我觉得楼主的分类表中应该多追加一个 当前分类所有子分类的字段 假设为 childnodes
<%#Eval("childnodes").ToString() 条件?“<img />”:"" %>
或者是在 子repeater的itemdatabound事件里遍历 父标签的控件,然后取消显示 另外 img标签的ID应该是唯一的
在repeater的itemdatabound事件里做判断。这个事件是在项被数据绑定后被激发,在这个事件里进行判断就可以实现你的要求了。
我之前试过了没用……
@laurie: 跟踪调试一下,看看代码执行到哪里了。
@棋怜: 补充一点,就是这样做的话外层repeater里面的图片样式将是一样的……抱歉,是我没有说清楚……