作一个下拉式菜单,用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得不到任何子控件。

解决方案 »

  1.   

    作一个下拉式菜单,用Repeater1作为主菜单,Repeater2作为子菜单。 请问楼主想要实现什么效果?
      

  2.   

    在外层Repeater1绑定完成时,确实没有相应的参数传递过去
    LZ的思路也是正确的,但我们可能在其中加一个判断再进行内层Repeater2的数据绑定
    像可以判断当没有参数时,我们就不执数第二个Repeater1控件的数据绑定
    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
    {             则不进行任何操作                  } 

      

  3.   

    不管楼上的如何判断,这个ItemDataBound是在外层Item生成完毕后才执行的,这时已经晚了
      

  4.   

    如果LZ用的是repeater嵌套,确有这个问题,楼主何不尝试用两个Repeater来实现功能,那样就不会有类似的问题发生了