请问在aspx页面上写如下效果,如何实现,本人是原先是在aspx上写c#代码来实现的,如果不把c#代码写在aspx上,可否实现这样的效果,如果可以的话,该如何实现,请各位指点迷津.aaa [添加二级栏目]  
   |-aa11 [添加三级栏目] 
   |-aa22 [添加三级栏目] 
   |-aa33 [添加三级栏目]  
      |-a-3-1  
      |-a-3-2PS:以上显示的数据都保存于同一个数据库中.

解决方案 »

  1.   

    用TreeView实现。
    menu.aspx 页面的html代码 
      <asp:TreeView ID="treelist" runat="server" ExpandDepth="0" Font-Size="12px" Width="100%"> 
      <LeafNodeStyle HorizontalPadding="3px" NodeSpacing="3px" /> 
    <NodeStyle NodeSpacing="3px" /> 
    </asp:TreeView> 
    后台代码: 
    protected void Page_Load(object sender, EventArgs e) 
        { 
            if (!this.IsPostBack) 
            { 
                using (SqlConnection sqlcon = new SqlConnection(SqlHelper.ConnectionStringLocalTransaction))//数据库连接 
                { 
                    sqlcon.Open(); 
                    SqlCommand sqlcom = new SqlCommand("select * from bbs_master_table", sqlcon); 
                    SqlDataReader reader = sqlcom.ExecuteReader(); 
                    while (reader.Read()) 
                    { 
                        TreeNode node = new TreeNode(reader["name"].ToString().Trim(), reader["id"].ToString().Trim(), "image/folder.gif", "bbs_list_style.aspx?id=" + reader["id"].ToString().Trim() + "&name="+HttpUtility.UrlEncode(reader["name"].ToString().Trim())+"","right"); 
                        using (SqlConnection sqlconChild=new SqlConnection(SqlHelper.ConnectionStringLocalTransaction)) 
                        { 
                            sqlconChild.Open(); 
                            SqlCommand sqlcomchild = new SqlCommand("select * from bbs_child_table where priid=" + reader["id"].ToString().Trim() + "", sqlconChild); 
                            SqlDataReader readerchild = sqlcomchild.ExecuteReader(); 
                            while (readerchild.Read()) 
                            { 
                                TreeNode nodeChild = new TreeNode(readerchild["cname"].ToString().Trim(), readerchild["id"].ToString().Trim(), "image/child.gif", "bbs_list_content.aspx?id=" + readerchild["id"].ToString().Trim() + "&name=" + HttpUtility.UrlEncode(readerchild["cname"].ToString().Trim()) + "", "right"); 
                                node.ChildNodes.Add(nodeChild);  
                            } 
                            readerchild.Close(); 
                        } 
                        treelist.Nodes.Add(node); 
                    } 
                } 
            } 
        } 
    后台代码说明: 
    bbs_master_table表字段有: 
    id 编号(int型,自加1) 
    name 名称//相当于CSDN上面的.net技术、java技术节点一样。 
    bbs_list_style.aspx页面是点击节点时链接的页面。 
    bbs_child_table子表字段有: 
    id 编号 主键 
    priid为外键号--主键为bbs_master_table 的id 
    cname子节点 
    这样就可以实现二级了。其它的楼主可以自己搞定啦....其实只要数据相对应,是很容易实现的。
      

  2.   


    <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebForm1" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
        <HEAD>
            <title>WebForm1</title>
        </HEAD>
        <body>
            <form id="Form1" method="post" runat="server">
                <FONT face="宋体">
                    <!-- 父Repeater开始 -->
                    <asp:Repeater id="Repeater1" runat="server">
                        <itemtemplate>
                            <b>
                                <br>
                                CustomerID:
                                <%#Eval("CustomerID") %>
                            </b>
                            <!-- 子Repeater开始 -->
                            <asp:repeater id="childRepeater" runat="server" 
              datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("CustOrder") %>'>
                                <itemtemplate>
                                    <%#Eval("[\"ORDERID\"]")%>
    <%--如果不是这样写的话,可能会出现DataBinding:“System.Data.DataRow”不包含名为“ORDERID”的属性--%>
                                    <br>
                                </itemtemplate>
                            </asp:repeater>
                            <hr>
                            <!-- 子Repeater结束 -->
                        </itemtemplate>
                    </asp:Repeater>
                    <!-- 父Repeater结束 -->
                    </FONT>
            </form>
        </body>
    </HTML>
     cs页面代码: Code
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;namespace HibernateTest
    {
        /**//// <summary>
        /// WebForm1 的摘要说明。
        /// </summary>
        public class WebForm1 : System.Web.UI.Page
        {
            protected System.Web.UI.WebControls.Repeater Repeater1;
        
            private void Page_Load(object sender, System.EventArgs e)
            {
                // 在此处放置用户代码以初始化页面
                if(!Page.IsPostBack)
                {
                    this.GetData();
                }
            }        Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
            override protected void OnInit(EventArgs e)
            {
                //
                // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
                //
                InitializeComponent();
                base.OnInit(e);
            }
            
            /**//// <summary>
            /// 设计器支持所需的方法 - 不要使用代码编辑器修改
            /// 此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {    
                this.Load += new System.EventHandler(this.Page_Load);        }
            #endregion
            private void GetData()
            {
                SqlConnection con = new SqlConnection("server=(local);database=Northwind;uid=sa;pwd=;");
                System.Data.SqlClient.SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customers",con);
                System.Data.SqlClient.SqlDataAdapter da1 =new SqlDataAdapter("SELECT * FROM ORDERS",con);
                DataSet ds= new DataSet();
                try
                {                
                    con.Open();
                    //将主表Customer添加到DataSet中
                    da.Fill(ds,"Customers");
                    //将子表Orders添加到DataSet中
                    da1.Fill(ds,"Orders");
                    //添加表Customer和表Orders之间的关系CustOrder;关联字段CustomerID
            ds.Relations.Add("CustOrder",ds.Tables["Customers"].Columns["CustomerID"],ds.Tables["Orders"].Columns["CustomerID"]);                this.Repeater1.DataSource = ds;
                    this.Repeater1.DataBind();
                
                }
                catch(Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    con.Close();
                    con.Dispose();
                }
            }
        }
    }
      

  3.   

    递归算法写个函数就可以了,Repeater 嵌套和用TreeView实现执行效率要低些,尤其是TreeView控件生成的html太庞大了
      

  4.   

    更多技术文章请关注http://stulife.qyun.netbruce blog.net技术专注于技术,切不可沉湎于技术
    用DropDownList 实现无限级分类,主要使用递归实现数据库结构:最终样式:
     protected void Page_Load(object sender, EventArgs e)
    2    {
    3        if (!Page.IsPostBack)
    4        {
    5             BindDrpClass();
    6         }
    7     }
    8    //绑定顶级分类
    9    private void BindDrpClass()
    10    {
    11         Bll.Class classSystem = new Bll.Class();
    12         DataTable dt = classSystem.GetClassList("").Tables[0];
    13         ddlClass.Items.Clear();
    14         ddlClass.Items.Add(new ListItem("添加根栏目","0"));
    15         DataRow[] drs = dt.Select("ParentID= " + 0);
    16
    17        foreach (DataRow dr in drs)
    18        {
    19            string classid = dr["ClassID"].ToString();
    20            string classname = dr["ClassName"].ToString();
    21            //顶级分类显示形式
    22             classname = "╋" + classname;
    23
    24             ddlClass.Items.Add(new ListItem(classname, classid));
    25            int sonparentid = int.Parse(classid);
    26            string blank = "├";
    27            //递归子分类方法
    28             BindNode(sonparentid, dt, blank);
    29         }
    30         ddlClass.DataBind();
    31     }
    32    //绑定子分类
    33    private void BindNode(int parentid, DataTable dt, string blank)
    34    {
    35         DataRow[] drs = dt.Select("ParentID= " + parentid);
    36
    37        foreach (DataRow dr in drs)
    38        {
    39            string classid = dr["ClassID"].ToString();
    40            string classname = dr["ClassName"].ToString();
    41
    42             classname = blank + classname;
    43             ddlClass.Items.Add(new ListItem(classname, classid));
    44
    45            int sonparentid = int.Parse(classid);
    46            string blank2 = blank + "─";
    47
    48             BindNode(sonparentid, dt, blank2);
    49         }
    50     }
    数据访问(Bll里面的classSystem方法 )
    public DataSet GetClassList(string strWhere)
    {
    StringBuilder strSql = new StringBuilder();
     strSql.Append("select * from tb_Class ");
     if (strWhere.Trim() != "")
     {
     strSql.Append(" where " + strWhere);
     }
     return SqlHelper.ExecuteDataset(SqlHelper.ConnString, CommandType.Text, strSql.ToString());
     }
      

  5.   

    可以实现,用treeview或是直接cs代码输出不就可以了
      

  6.   

    使用TreeView控件来实现就可以了
      

  7.   

    在下拉框或TREEVIEW实现树结构
    参考