aspx:
<cc1:Accordion ID="Accordion1" runat="server" AutoSize="Limit" Height="270px" CssClass="accordion"
            HeaderCssClass="header" ContentCssClass="content" >
            <Panes>
            </Panes>
            <HeaderTemplate>
                <div style="background-image:url(../images/contact_large.gif)">
                    <span><%# DataBinder.Eval(Container.DataItem, "TypeName")%></span>
                </div>
            </HeaderTemplate>
            <ContentTemplate>
                    <ul>
                        <li>
                          <a href="" target="_blank"><%# DataBinder.Eval(Container.DataItem, "SortName")%></a>
                        </li>
                    </ul>
            </ContentTemplate>
        </cc1:Accordion>
CS://Accordion动态显示分类(大类)
    protected void AccordionGetType()
    {
        try
        {
            myConn = new SqlConnection(dns);
            string sql = "select top 4 TypeName,SortName from Type,Sort where Type.TypeId = Sort.TypeId and IsShow = 1";
            myConn.Open();
            SqlDataAdapter ap = new SqlDataAdapter(sql,myConn);
            DataSet ds = new DataSet();
            ap.Fill(ds,"分类名称");
            Accordion1.DataSource = new DataView(ds.Tables[0]);
            Accordion1.DataBind();                 }
        catch (SqlException ex)
        {
            ex.StackTrace.ToString();
        }
        finally
        {
            myConn.Close();
        }
    }
如此绑定的结果是,检索四条记录的时候, <headerTemplete>可以正确显示,并且每个大类下面的 <ContentTemplate>中都可以显示 一条子类.问题是,如果为某一个大类中添加超过两个子类,那么,子类不会在该大类下的 <ContentTemplate>中显示,而是另外作为一 个 <headerTemplete>显示.画一个示意图,高人帮忙分析一下! -------------------- 
大类一 
-------------------- 
小类1 -------------------- 
大类二 
-------------------- 
小类 -------------------- 
大类三 
-------------------- 
小类 -------------------- 
大类一 
-------------------- 
小类2
 (就是这种形式,若为大类一添加两个小类的话,accordion控件就会这样显示,不知是哪里的问题,请求高人协助了!) 
如若有类似的例子更好,谢谢了!

解决方案 »

  1.   

    附上两个表的表结构 Type表: 
    TypeId (主键) 
    TypeName (大类名称) 
    TypeOrderNum (排序字段) 
    IsShow (是否为推荐) Sort表: 
    SortId (主键) 
    TypeId (外键) 
    SortName (小类名称) 
    OrderNum (排序字段) 
      

  2.   

    你查询得到的数据表就是一个大类,一个小类这样一条记录,
    并且把这个作为Accordion的数据源绑定肯定是
    一条大类,一条小类这样子了
    想办法改变你的查询结果...
      

  3.   

    你要的是嵌套循环,而非一次循环。现在你把type和sort两个表join到一起了,查询结果就是一个表,自然是一次循环,一个大类和一个小类在一条记录中配对。你要按大类归类,就必须先绑定大类,然后在大类绑定项里面嵌套小类的查询,然后再来小类绑定,类似于两层Repeater嵌套的样子。
      

  4.   

    可以这样,如果是的意思,加分吧!
    -------------------------------------
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {            this.Accordion1.DataSource=GetList();
                this.Accordion1.DataBind();        }
        }
        //获取类别名称组成数据源
        public List<TypeSort> GetList()
        {
            List<TypeSort> ts = new List<TypeSort>();
            SqlDataReader sdr1 = SqlHelper.ExecuteReader(CommandType.Text, "select typeId,TypeName from Type where IsShow=1 order by TypeOrderNum ");
            while (sdr1.Read())
            {
                string strType = "";
                SqlDataReader sdr2 = SqlHelper.ExecuteReader(CommandType.Text, "select sortId,sortName from sort where typeId=" + sdr1.GetInt32(0).ToString() + " order by orderNum");
                while (sdr2.Read())
                {
                    strType += sdr2.GetString(1) + "<br>";
                }
                if (strType.Length > 1)
                    strType = strType.Substring(0, strType.Length - 1);
                ts.Add( new TypeSort(sdr1.GetString(1),strType) );
            }
            return ts;
        }//大小类model类
        public class TypeSort
        {
            private string _typeName;
            private string _sortName;
            public string typeName
            {
                get { return _typeName; }
                set { this._typeName = value; }
            }
            public string sortName
            {
                get { return _sortName; }
                set { this._sortName = value; }
            }
            public TypeSort(string _typeName, string _sortName)
            {
                this._typeName = _typeName;
                this._sortName = _sortName;
            }
        }
    ----------------------------------------------------------------
      

  5.   

    不好意思把下面这行
    strType += sdr2.GetString(1) + " <br>"; 
    改成:
    strType += sdr2.GetString(1) + " ";