当前位置: 代码迷 >> ASP.NET >> 关于Repeater嵌套控件,小弟我也有一个有关问题:如何处理两次绑定
  详细解决方案

关于Repeater嵌套控件,小弟我也有一个有关问题:如何处理两次绑定

热度:672   发布时间:2013-02-25 00:00:00.0
关于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来实现功能,那样就不会有类似的问题发生了
------解决方案--------------------------------------------------------
路过 帮顶
  相关解决方案