本帖最后由 leileilang0 于 2010-12-08 11:48:19 编辑

解决方案 »

  1.   

     DataSet dshhydt = new DataSet();
    在你的判断条件的外面。最好在内层repeater绑定完后做下处理
    rphhydt.DataBind();
    后面加上  dshhydt.Clear();
      

  2.   

    试了下,只是循环了1遍而已。剩下的都没输出出来额,跟以前一样呢,现在加个2个Panel,就是来判断为空显示那个Panel不为空是那个Panel,有10个城市,9个是空的,现在这样判断就是输出了1个城市后就不输出别的了。。
     protected void rpcitylist_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                //省列表中只显示综合排名前20位商家,如想看更多请点击城市右侧更多或点击上方城市  
                DataSet dshhydt = new DataSet();
                //判断里层repeater处于外层repeater的哪个位置( AlternatingItemTemplate,FooterTemplate,
                //HeaderTemplate,,ItemTemplate,SeparatorTemplate)
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    Repeater rphhydt = e.Item.FindControl("rphhydtlist") as Repeater;//找到里层的repeater对象 
                    Panel plair = e.Item.FindControl("plair") as Panel;
                    Panel plhae = e.Item.FindControl("plhae") as Panel;
                    Label lalair = e.Item.FindControl("labEmpty") as Label;
                    DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项             
                    int cid = Convert.ToInt32(rowv["id"]); //获取填充子类的id只要是父级Repeater查出来的列都可在这里写 
                    dshhydt = new WebHelper.ClassDB().ReDataSetTop("Adv_Users", "CityID='" + cid + "' and State=1", "TravelName,QQ,DisplayName", "id desc", "20");
                    rphhydt.DataSource = dshhydt;
                    rphhydt.DataBind();
                    dshhydt.Clear();
                    if (rphhydt.Items.Count == 0)
                    {
                        plair.Visible = true;
                        plhae.Visible = false;
                    }
                    else
                    {
                        plair.Visible = false;
                        plhae.Visible = true;
                    }
                }
            }
      

  3.   

    那就是没有数据,没有数据不显示不是正好吗。
    如果数据库里确实有数据的,那就检查下内层repeater的绑定条件是否正确。
      

  4.   

    现在是2层里边没有数据了,1层就不循环了呢。。我要的是1层不管什么都循环,2层里再根据是否为空输出HTML代码呢。
      

  5.   

    所谓“嵌套”,乱不乱啊?! 如果不知道数据之所以可以绑定到控件上的原理,就不要随便放<%#Eval("DisplayName") %>这种代码。给你个忠告,不要嵌套,把内层的Repeater放到单独的ascx中去单独实现。
      

  6.   

    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Repeater rphhydt = e.Item.FindControl("rphhydtlist") as Repeater;
    }
    根据内部的数据源,设置visible
      

  7.   

    额。。那应该怎么输出控件里的数据呢不用<%#Eval("") %>这个的话,
      

  8.   

    额。。自己从别的地方弄出来了。。在第二个外边加了个asp:Panel,在属性中Visible='<%#bool.Parse((rpcitylist.Items.Count!=0).ToString()) %>'来判断是否为空,还是比较简单的。。谢谢楼上各位~~~
      

  9.   

     那个不行啊, 如果不嵌套好使啊.
    可以放一个PlaceHolder 里面放任意的html
     <asp:PlaceHolder ID="PlaceHolder_PicturesListEmpty" runat="server" Visible='<%#bool.Parse((rpcitylist.Items.Count!=0).ToString()) %>'>
    一旦Repeater嵌套我也不知道该怎么弄了.