如何实现导航栏的功能,差不多就像csdn社区左侧那种,点击大类,小类就在下面列出来。最好是有代码,没有的话讲点思路也好。

解决方案 »

  1.   

    用asp.net2.0自带的treeview控件啊
      

  2.   

    用数据库记录节点也行 用XML文件也行 给你个例子吧
    sql:
    ---------------------------------
     ChildNodeID ChildNodeName  ParentID
    1 a
    2 b
    3 a1 1
    4 a2 1
    5 b1 2
    6 a11 3
    C#代码
    ---------------------------------------------------
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                this.NodeBind();//页面加载时解析数据库绑定TreeNode根节点
                this.DisPanel(true);//显示或不显示
            }
        }    #region//数据库连接字符串
        public void conString()
        {
            string conStr = "server=.;uid=sa;pwd=;database=Demo";
            con = new SqlConnection(conStr);
        }
        #endregion    #region//页面加载时绑定TreeNode根节点
        public void NodeBind()
        {
            this.tvadd.Nodes[0].ChildNodes.Clear();//清空TreeView中所有节点
            this.tvadd.Nodes[0].Expanded = true;//设置根节点为展开形式
            this.AddChildNode("NULL",this.tvadd.Nodes[0]);
        }
        #endregion    #region//递归解析数据库中节点并绑定在TreeView控件上
        /// <summary>
        /// 递归解析数据库中节点并绑定在TreeView控件上
        /// </summary>
        /// <param name="sqltj">要解析库这个节点归属于哪个父节点</param>
        /// <param name="tn">要添加下一级节点的父节点</param>
        public void AddChildNode(string sqltj,TreeNode tn)
        {
            string sql = "select * from AddNodes where ParentID";//查询该父节点下还有无子节点SQL语句
            if (sqltj == "NULL")
            {
                sql += " IS NULL";//也就是说是根节点下面的第一级子节点
            }
            else
            {
                sql += "=" + sqltj;//查询sqltj下有无子节点
            }
            
            DataTable dt = this.dtDataBind(sql);
            if (dt.Rows.Count == 0)//说明此节点下无子节点
            {
                return;//退出
            }
            else
            {
                for (int i = 0; i < dt.Rows.Count; i++)//循环DataTable表中子节点记录
                {
                    TreeNode tnchild = new TreeNode();//创建新的子节点
                    tnchild.Text = dt.Rows[i][1].ToString();//为新建子节点的文本赋值
                    tnchild.Value = dt.Rows[i][1].ToString();//为新建子节点的Value赋值
                    tnchild.Expanded = true;//设置为不展开节点
                    tn.ChildNodes.Add(tnchild);//添加此节点的下一级子节点
                    //递归调用,一直往下直到添加完这一级下面的所有子节点为止,再转到下一个父节点,并添加所有此父节点下面的所有子节点
                    //i代表DataTable表中循环记录,0代表取得这个记录的ID值,为下面继续检查这个ID下是否还有子目录
                    //tnchild递归传递给下一次调用此方法,此时如果这个节点下还有子节点,它便成为父节点,对它下面的子节点进行添加
                    this.AddChildNode(dt.Rows[i][0].ToString(),tnchild);
                }
            }
        }
        #endregion
    ----------------------------------------
      

  3.   

    XML:
    ---------------------------------------------------
    <?xml version="1.0" encoding="utf-8" ?>
    <school>
      <class name="classone">
        <student id="1">
          <name id="tom" sex="boy" />
        </student>
        <student id="2">
          <name id="jey" sex="boy" />
        </student>
        <student id="3">
          <name id="jam" sex="gril" />
        </student>
        <student id="4">
          <name id="christina" sex="gril" />
        </student>
      </class>
      <class name="classtwo">
        <student id="1">
          <name id="" sex="boy" />
        </student>
        <student id="2">
          <name id="jane" sex="gril" />
        </student>
        <student id="3">
          <name id="jett" sex="gril" />
        </student>
        <student id="4">
          <name id="ateen" sex="gril" />
        </student>
      </class>
    </school>
    C#:
    ------------------------------------------------------------
    ...
    using System.Xml;
    using System.Xml.XPath;public partial class Test_TreeViewDemo2 : System.Web.UI.Page
    {
        XmlDocument xmlDoc;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.TreeView1.ShowLines = true;
                this.LoadXmlTree();
            }
        }    public void LoadXmlTree()
        {
            xmlDoc = new XmlDocument();
            xmlDoc.Load(Server.MapPath("classXml.xml"));        XmlNodeList xnl = xmlDoc.SelectSingleNode("school").ChildNodes;
            TreeNode tn = new TreeNode();
            tn.Text = "school";
            tn.Value = "-1";
            tn.Expanded = false;
            this.TreeView1.Nodes.Add(tn);        foreach (XmlNode xn in xnl)
            {
                XmlElement xe = (XmlElement)xn;
                TreeNode tnC = new TreeNode();
                tnC.Text = xe.GetAttribute("name");
                tnC.Value = xe.GetAttribute("name");
                tnC.Expanded = true;
                tn.ChildNodes.Add(tnC);
                this.TreeNodeBind(xn.ChildNodes,tnC);
            }
        }    public void TreeNodeBind(XmlNodeList xnl,TreeNode tn)
        {
            foreach (XmlNode xnNext in xnl)
            {
                XmlElement xe = (XmlElement)xnNext;
                TreeNode tnNext = new TreeNode();
                tnNext.Text = xe.GetAttribute("id");
                tnNext.Value = xe.GetAttribute("sex");
                tnNext.Expanded = true;
                tn.ChildNodes.Add(tnNext);
                this.TreeNodeBind(xnNext.ChildNodes,tnNext);
            }
        }
      

  4.   

    用infragistics组件中的UItraWebTree控件
      

  5.   

    弄个 treeview先试试  很有感觉的
      

  6.   

    asp.net 2.0 自带 TreeView 控件
      

  7.   

    怎么这么多人想学csdn左册导航?
    类似这种百度一下N多
    不过,虽然 .net2.0 自带treeview 1.1的也可用webcontrol 但还是用 C# + javascript实现体验好一些
    建议LZ抓住CSDN的tree看上半个时辰,问题自然解决!