关于Repeater嵌套控件,我也有一个问题:如何避免两次绑定?
作一个下拉式菜单,用Repeater1作为主菜单,Repeater2作为子菜单。
在Repeater1里面嵌Repeater2,而这个数据源所需的参数是必须由外层Repeater1绑定值以后才能提供的,
这就出现了问题,当外层执行完时我没有办法在Repater2绑定之前获取外层的值.结果Repater2立刻执行了一次徒劳的、无任何参数的绑定.
然后才用OnItemDataBound事件对内层Repeater2执行了第二次正确的绑定.
如以下代码:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
((ObjectDataSource)e.Item.FindControl("odsSubMenu")).SelectParameters["pID"].DefaultValue = ((HiddenField)e.Item.FindControl("hdnMenuID")).Value;
((Repeater)e.Item.FindControl("Repeater2")).DataBind();
}
}
我试过用OnItemCreated事件,但是那样用FindControl得不到任何子控件。
------解决方案--------------------先帮顶mark
------解决方案--------------------作一个下拉式菜单,用Repeater1作为主菜单,Repeater2作为子菜单。
请问楼主想要实现什么效果?
------解决方案--------------------在外层Repeater1绑定完成时,确实没有相应的参数传递过去
LZ的思路也是正确的,但我们可能在其中加一个判断再进行内层Repeater2的数据绑定
像可以判断当没有参数时,我们就不执数第二个Repeater1控件的数据绑定
C# code
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item ¦ ¦ e.Item.ItemType == ListItemType.AlternatingItem)
{
if(!其控件的参数值为初始值或是默认认值是)
{
((ObjectDataSource)e.Item.FindControl( "odsSubMenu ")).SelectParameters[ "pID "].DefaultValue = ((HiddenField)e.Item.FindControl( "hdnMenuID ")).Value;
((Repeater)e.Item.FindControl( "Repeater2 ")).DataBind();
}
else
{ 则不进行任何操作 }
}
------解决方案--------------------
如果LZ用的是repeater嵌套,确有这个问题,楼主何不尝试用两个Repeater来实现功能,那样就不会有类似的问题发生了
------解决方案--------------------
路过 帮顶