举例数据库里 表Biao  有列 如下列 如下值
id Name Number   Type  
1    A        1               1
2    B        1               1
3    C        1               2
4    D        2              2
5    E         2              2比如说在BiaoSQL.cs里有如下SQL
//获取type不重复显示
public void GetType()
{
 string Sql="Select distinct  type  from Biao";
return SqlHelper.ExecuteTable(CommandType.Text, Sql);
}//根据Type获取相同type的Number  不重复显示Number
public void GetNumByType(string Type)
{
string Sql="Select distinct Number from Biao where Type=@type  "
        SqlParameter[] Parameter =
                {
                    new SqlParameter("@Type",SqlDbType.NVarChar)
                };
        Parameter[0].Value = Type;
 return SqlHelper.ExecuteTable(CommandType.Text, Sql, Parameter);
}//根据Type和Number获取相对应内容
public void GetNameByNumAndType(string Number,string Type)
{
string Sql="Select distinct Number from Biao where Type=@type  "
        SqlParameter[] Parameter =
                {
                    new SqlParameter("@Number",SqlDbType.NVarChar)
                    new SqlParameter("@Type",SqlDbType.NVarChar)
                };
        Parameter[0].Value = Number;
       Parameter[1].Value = Type;
 return SqlHelper.ExecuteTable(CommandType.Text, Sql, Parameter);
}我的想法是这样子的
A.aspx
   <asp:Repeater ID="Type" runat="server" OnItemDataBound="Type_ItemDataBound">
                                    <ItemTemplate>
<%#Eval(Type)%>
<asp:Repeater ID="NumberByType" runat="server" OnItemDataBound="NumberByType_ItemDataBound">
<ItemTemplate>
<%#Eval(Number)%>
<asp:Repeater ID="NameByNumAndType" runat="server" >
<ItemTemplate>
<%#Eval(Name)%>
</ItemTemplate>
</Repeater>
</ItemTemplate>
</Repeater>
</ItemTemplate>
</Repeater>
相对应的CS页面中A.aspx.cs
//最外层先读出来Type并且不重复显示
public void Type(){
        DataTable ShowType= BiaoSQL.GetType();            this.Type.DataSource = ShowType;
            this.Type.DataBind();
}//第二层
    protected void NumberByType_ItemDataBound(object sender, RepeaterItemEventArgs c)
    {   
    if (c.Item.ItemType == ListItemType.Item || c.Item.ItemType == ListItemType.AlternatingItem)
        {
            RepeaterItem item = c.Item;
            DataRowView rowv = (DataRowView)c.Item.DataItem;
            DataTable ShowNumberByType= BiaoSQL.GetNumberByType(rowv[0].ToString());//把分类Repeater关联的数据项传入参数中
            Repeater rpt = (Repeater)e.Item.FindControl("NumberByType");//第二层的ID
           if (ShowNumberByType!= null && ShowNumberByType.Rows.Count > 0)
            {                rpt.DataSource = ShowNumberByType;
                rpt.DataBind();
            }
     }
}
嵌套一共三成之后 不知道第二层是不是这么写。如果是这样子的话 我想完成第三层 该怎么去写? 
望帮助。。我是菜鸟。。唉。。

解决方案 »

  1.   

    楼主并没有把表的结构说清楚,如果我修改会这样写,请根据你实际的业务修改HTML code<asp:Repeater runat="server" ID="rpTitle">
        <ItemTemplate>
            <table style="width: 880px">
                <tr>
                    <td>
                        <asp:Label runat="server" ID="lblTitle" Text='<%# Eval("typename")  %>'></asp:Label>
                    </td>
                </tr>
            </table>
            <asp:Repeater runat="server" ID="rpQuestion" DataSource='<%# Bind1(Eval("typename").ToString()) %>'>
                <ItemTemplate>
                    <table>
                        <tr>
                            <td>
                                <%# Eval("bid")%>
                                <asp:Label runat="server" ID="lblQuestion" Text='<%# Eval("title")  %>'></asp:Label>
                               <%-- <asp:HiddenField runat="server" ID="hidID" Value='<%# Eval("id")%>' />--%>
                            </td>
                        </tr>
                        <tr>
                        </tr>
                    </table>
                    <asp:Repeater runat="server" ID="rpAnswer" DataSource='<%# Bind2(Eval("id").ToString()) %>'>
                        <ItemTemplate>
                            <table>
                                <tr>
                                    <td>
                                       
                                    </td>
                                </tr>
                                <tr>
                                </tr>
                            </table>
                        </ItemTemplate>
                    </asp:Repeater>
                </ItemTemplate>
            </asp:Repeater>
        </ItemTemplate>
    </asp:Repeater>
    父级
    <%# ((Label)((RepeaterItem)((Repeater)(((RepeaterItem)Container).NamingContainer)).NamingContainer).FindControl("Label1")).Text %>
    e.Item.Parent.Parent.FindControl("")