标题:Repeater嵌套二级显示不正常(附图说明)描述:大类的myNoBigClassName这一部分显示是正常的小类的myNoSmallClassName我是参照大类的思路来做的,但是在显示的时候,总是不正常具体效果如下:HTML Code<!--大类循环显示开始-->
<% if(myNoBigClassName != ""){ %>
<tr>
   <td height="30" colspan="3"><%= myNoBigClassName %></td>
</tr>
<% } %>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
   <td height="30">大类</td>
</tr>
   <!--小类循环显示开坮-->
  
   <% if(myNoSmallClassName != ""){ %>
   <tr>
      <td height="30" colspan="3"><%= myNoBigClassName %></td>
   </tr>
   <% } %>   <asp:Repeater ID="Repeater2" runat="server" DataSource='<%# BindSub(Convert.ToInt32(Eval("InfomationBigClass_ID")))%>'>
   <ItemTemplate>
   <tr>
      <td height="30">小类</td>
   </tr>
   </ItemTemplate>
   </asp:Repeater>
   <!--小类循环显示结束-->
</ItemTemplate>
</asp:Repeater>
<!--大类循环显示结束-->
C# Codepublic partial class InfomationClassManage : MacBase
{
    protected string myNoBigClassName = null;
    protected string myNoSmallClassName = null;    protected void Page_Load(object sender, EventArgs e)
    {
        // 数据库链接
        SqlConnection myConnection = new SqlConnection(strConnection);
        myConnection.Open();        // 数据库查询
        string mySql = "select * from Mac_InfomationBigClass";
        SqlDataAdapter myAdapter = new SqlDataAdapter(mySql,myConnection);        // 查询结果填充到DataSet数据集
        DataSet mySet = new DataSet();
        myAdapter.Fill(mySet);        // 用DataSet数据集绑定控件        
        Repeater1.DataSource = mySet;
        Repeater1.DataBind();
        myNoBigClassName = Repeater1.Items.Count == 0 ? "提示:您还没有添加任何信息大类!" : "";
                
        myConnection.Close();      
    }    protected DataTable BindSub(int nBigClassID)
    {
        // 数据库链接
        SqlConnection myConnection = new SqlConnection(strConnection);
        myConnection.Open();        // 数据库查询
        string mySql = "select * from Mac_InfomationSmallClass where InfomationBigClass_ID = @nBigClassID";
        SqlDataAdapter myAdapter = new SqlDataAdapter(mySql,myConnection);        // 查询结果填充到DataSet数据集
        myAdapter.SelectCommand.Parameters.AddWithValue("nBigClassID", nBigClassID);
        DataSet mySet = new DataSet();
        myAdapter.Fill(mySet);    
        
// 判断是否有记录存在
        if (mySet.Tables[0].Rows.Count == 0)
        {
            myNoSmallClassName = "提示:你还没有添加任何信息小类!";
        }
        myConnection.Close();
        return mySet.Tables[0];
    }
}

解决方案 »

  1.   

    // 判断是否有记录存在 
            if (mySet.Tables[0].Rows.Count == 0) 
            { 
                myNoSmallClassName = "提示:你还没有添加任何信息小类!"; 
            } 
            myConnection.Close(); 
            return mySet.Tables[0]; 问题应该在 if (mySet.Tables[0].Rows.Count == 0) 
    这个判断上~ 此时mySet应该有两个表,第一个表是大类的,第二个表是小类。这里要写数字的话,应该是1不过不推荐用数字,在myAdapter.Fill 时可以指定表名的(你看下就知道了)然后通过表名来查找
      

  2.   

    不知道怎么了~ 人晕晕的。问题不在 mySet 上,我看错了
      

  3.   

    测试不能通过,提示无法找到表,后面有一个 return mySet.Tables[0]; 所以我想应该不是这里的问题吧。
      

  4.   


    <% if(myNoSmallClassName != ""){ %> 
        <tr> 
           <td height="30" colspan="3"> <%= myNoBigClassName %> </td> 
        </tr> 
        <% } %> <asp:Repeater ID="Repeater2" runat="server" DataSource=' <%# BindSub(Convert.ToInt32(Eval("InfomationBigClass_ID")))%>'> 
        <ItemTemplate> 
        <tr> 
           <td height="30">小类 </td> 
        </tr> 
        </ItemTemplate> 
        </asp:Repeater> 
        <!--小类循环显示结束--> 
    </ItemTemplate> 
    </asp:Repeater> 
    你把这两个位置换一下,告诉我什么效果
      

  5.   

    楼主,你在用ASP的思路做ASP.NET,强烈不推荐
      

  6.   


    恩,应该屏弃<% %> 这种asp 时代的写法
      

  7.   


        protected string myNoBigClassName = null; 
        protected string myNoSmallClassName = null; 换成    protected string myNoBigClassName = ""; 
        protected string myNoSmallClassName = ""; 
    or    protected string myNoBigClassName = string.Empty; 
        protected string myNoSmallClassName = string.Empty; 
    要不有可能出现空指针异常把<% if(myNoSmallClassName != ""){ %> 
        <tr> 
           <td height="30" colspan="3"> <%= myNoBigClassName %> </td> 
        </tr> 
        <% } %> 
    myNoBigClassName = Repeater1.Items.Count == 0 ? "提示:您还没有添加任何信息大类!" : ""; 
    换成
    <%= string.IsNullOrEmpty(myNoBigClassName)?"":"<tr><td height="30" colspan="3">"+myNoBigClassName+"</td></tr>"%>myNoBigClassName = Repeater1.Items.Count == 0 ? "提示:您还没有添加任何信息大类!" : ""; 
      

  8.   

    下次脑袋不好使 可不能答题,自己郁闷到没什么。还耽误别人时间。LZ  ,对不住了。耽误了半天,我终于想明白是什么原因了你的目的是想循环取 myNoSmallClassName 可实际上取的都是 myNoSmallClassName  最后被赋的值不知你明白我的意思么 
      

  9.   


    <% if(myNoSmallClassName != ""){ %> 
        <tr> 
           <td height="30" colspan="3"> <%= myNoBigClassName %> </td> 
        </tr> 
        <% } %>     <asp:Repeater ID="Repeater2" runat="server" DataSource=' <%# BindSub(Convert.ToInt32(Eval("InfomationBigClass_ID")))%>'> 
        <ItemTemplate> 
        <tr> 
           <td height="30">小类 </td> 
        </tr> 
        </ItemTemplate> 
        </asp:Repeater> 换成    <asp:Repeater ID="Repeater2" runat="server" DataSource=' <%# BindSub(Convert.ToInt32(Eval("InfomationBigClass_ID")))%>'> 
        <ItemTemplate> 
        <tr> 
           <td height="30">小类 </td> 
        </tr> 
        </ItemTemplate> 
        </asp:Repeater> 
        <%# ((Repeater)Container.FindControl("rp")).Items.Count==0?"<tr><td height='30' colspan='3'>提示:你还没有添加任何信息小类!</td></tr>":""%>这样试试把我在12楼的代码 html属性的"换成' 要不出错了。
      

  10.   

    把 FindControl("rp") 换成 FindControl("Repeater2")
      

  11.   

    楼主,你还在坚持阿,我不说别的,就下面这个Page_Load没有用IsPostBack判断回传,将来修改和删除就有得你改了,我再次强调,这种ASP做法思路就有问题,奉劝你早日放弃这种思路
        protected void Page_Load(object sender, EventArgs e) 
        {
            if (!IsPostBack)
            {
                // 数据库链接 
                SqlConnection myConnection = new SqlConnection(strConnection);
                myConnection.Open();            // 数据库查询 
                string mySql = "select * from Mac_InfomationBigClass";
                SqlDataAdapter myAdapter = new SqlDataAdapter(mySql, myConnection);            // 查询结果填充到DataSet数据集 
                DataSet mySet = new DataSet();
                myAdapter.Fill(mySet);            // 用DataSet数据集绑定控件         
                Repeater1.DataSource = mySet;
                Repeater1.DataBind();
                myNoBigClassName = Repeater1.Items.Count == 0 ? "提示:您还没有添加任何信息大类!" : "";            myConnection.Close();
            }
        } 
      

  12.   

    24楼的,你好,请问一下有没有改善的参考呢? 我也想做成你说的,可是不会啊,因为刚从ASP转过来。
      

  13.   

    http://topic.csdn.net/u/20080430/14/87278029-cfa2-4ed2-b008-394e575c4ce9.html
      

  14.   

    问题终于解决了,非常感谢 Sandy945的顶立支持。关键代码:<%# ((Repeater)Container.FindControl("rp")).Items.Count==0?"<tr><td height='30' colspan='3'>提示:你还没有添加任何信息小类!</td></tr>":""%>