我想这个功能大家肯定都有遇到过!就是从数据库读出来绑定到一棵树形菜单上!带有复选框的要怎么实现啊!有代码写代码哟最好有实例哟本人比较笨啊!谢谢各位的

解决方案 »

  1.   

    TreeView就可以呀
    http://wenwen.soso.com/z/q193195692.htm
    http://www.tzwhx.com/newOperate/html/1/11/115/20786.html
    属性可以设置是否显示CheckBox
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;namespace WebApp {
        public partial class TreeViewSample : System.Web.UI.Page {
            protected void Page_Load(object sender, EventArgs e) {
                TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
                if (!IsPostBack) {
                    CreateData();
                    BindTree(dtlModel.Select("pid='0'"), null);
                    ////父子节点联动
                    //TreeView1.Attributes.Add("onclick", "OnTreeNodeChecked(event)");                ////获取节点值
                    TreeView1.Attributes.Add("onclick", "getHideValue(event)");                DataView dv1 = dtlModel.DefaultView;
                    dv1.RowFilter = "id=1";
                    DataView dv2 = dtlModel.Copy().DefaultView;
                    dv2.RowFilter = "id=2";
                }
            }        DataTable dtlModel = new DataTable();
            private void CreateData() {
                dtlModel.Columns.Add("id", typeof(Int32));
                dtlModel.Columns.Add("pid", typeof(Int32));
                dtlModel.Columns.Add("name");            for (int i = 1; i < 6; i++) {
                    DataRow dr = dtlModel.NewRow();
                    dr["id"] = i;
                    dr["pid"] = 0;
                    dr["name"] = i.ToString();
                    dtlModel.Rows.Add(dr);
                    for (int j = 1; j < 6; j++) {
                        DataRow dr1 = dtlModel.NewRow();
                        dr1["id"] = int.Parse(i.ToString() + j.ToString());
                        dr1["pid"] = i;
                        dr1["name"] = i + "_" + j;
                        dtlModel.Rows.Add(dr1);
                        for (int k = 1; k < 6; k++) {
                            DataRow dr2 = dtlModel.NewRow();
                            dr2["id"] = int.Parse(i.ToString() + j.ToString() + k.ToString());
                            dr2["pid"] = dr1["id"];
                            dr2["name"] = i + "_" + j + "_" + k;
                            dtlModel.Rows.Add(dr2);
                        }
                    }
                }
            }        private void BindTree(DataRow[] rows, TreeNode node) {
                foreach (DataRow r in rows) {
                    if (r["pid"] == DBNull.Value)
                        continue;                //如果是根结点,添加到TreeView控件
                    if (r["pid"].ToString() == "0") {
                        TreeNode node1 = new TreeNode();
                        node1.Text = string.Format("<input name='hd_{0}' type='hidden' value='{1}'/>{2}", r["id"], r["id"], r["name"].ToString());
                        node1.Value = r["id"].ToString();
                        
                        //node1.Target = "top";
                        TreeView1.Nodes.Add(node1);
                        BindTree(dtlModel.Select("pid=" + r["id"]), node1);
                    }
                    else if (node != null) {//否则添加到当前结点
                        TreeNode node1 = new TreeNode();
                        node1.Text = string.Format("<input name='hd_{0}' type='hidden' value='{1}'/>{2}", r["id"], r["id"], r["name"].ToString());
                        node1.Value = r["id"].ToString();
                        //node1.Target = "top";
                        node.ChildNodes.Add(node1);
                        BindTree(dtlModel.Select("pid=" + r["id"]), node1);//递归生成子树
                    }
                }
            }        protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e) {
                Response.Write("aaa");
            }        protected void TreeView2_TreeNodeDataBound(object sender, TreeNodeEventArgs e) {
                e.Node.NavigateUrl = string.Format("project.aspx?projectnum=", e.Node.Value);
            }    }
    }
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeViewSample.aspx.cs"
        Inherits="WebApp.TreeViewSample" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>treeview父子节点联动</title>    <script type="text/javascript">        function OnTreeNodeChecked(evt) {
                var objNode = evt.srcElement ? evt.srcElement : evt.target;            if (objNode.checked == true) {
                    alert(getHideValue(objNode));
                    setParentChecked(objNode);
                    var objID = objNode.getAttribute("ID");
                    var objID = objID.substring(0, objID.indexOf("CheckBox"));
                    var objParentDiv = document.getElementById(objID + "Nodes");
                    if (objParentDiv != null && objParentDiv != "undefined") {
                        setChildChecked(objParentDiv);
                    }
                }
                else {
                    var objID = objNode.getAttribute("ID");
                    var objID = objID.substring(0, objID.indexOf("CheckBox"));
                    var objParentDiv = document.getElementById(objID + "Nodes");
                    if (objParentDiv != null && objParentDiv != "undefined") {
                        setChildUnChecked(objParentDiv);
                    }
                }            if (objNode.tagName && objNode.tagName != "INPUT") {
                    if (objNode.tagName == "IMG") {
                        return true;
                    }
                    else {
                        if (window.event) {
                            window.event.returnValue = false;
                            return false;
                        }
                        else {
                            evt.preventDefault();
                            evt.stopPropagation();
                        }
                    }
                }
            }        function getParentByTagName(element, tagName) {
                var parent = element.parentNode;
                var upperTagName = tagName.toUpperCase();            while (parent && (parent.tagName.toUpperCase() != upperTagName)) {
                    parent = parent.parentNode ? parent.parentNode : parent.parentElement;
                }
                return parent;
            }        function setParentChecked(objNode) {
                var objParentDiv = getParentByTagName(objNode, "div");
                if (objParentDiv == null || objParentDiv == "undefined") {
                    return;
                }
                var objID = objParentDiv.getAttribute("ID");
                objID = objID.substring(0, objID.indexOf("Nodes"));
                objID = objID + "CheckBox";
                var objParentCheckBox = document.getElementById(objID);
                if (objParentCheckBox == null || objParentCheckBox == "undefined") {
                    return;
                }
                if (objParentCheckBox.tagName != "INPUT" && objParentCheckBox.type == "checkbox")
                    return;
                objParentCheckBox.checked = true;
                setParentChecked(objParentCheckBox);
            }        function setChildUnChecked(divID) {
                var objchild = divID.children;
                var count = objchild.length;
                for (var i = 0; i < objchild.length; i++) {
                    var tempObj = objchild[i];
                    if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") {
                        tempObj.checked = false;
                    }
                    setChildUnChecked(tempObj);
                }
            }        function setChildChecked(divID) {
                var objchild = divID.children;
                var count = objchild.length;
                for (var i = 0; i < objchild.length; i++) {
                    var tempObj = objchild[i];
                    if (tempObj.tagName == "INPUT" && tempObj.type == "checkbox") {
                        tempObj.checked = true;
                    }
                    setChildChecked(tempObj);
                }
            }        function getHideValue(evt) {
                var node = evt.srcElement ? evt.srcElement : evt.target;            if (node.checked == true) {
                    //alert(getParentByTagName(node, "td").innerHTML);
                    var objchild = getParentByTagName(node, "td").getElementsByTagName("input");
                    for (var i = 0; i < objchild.length; i++) {
                        var tempObj = objchild[i];
                        if (tempObj.tagName == "INPUT" && tempObj.type == "hidden") {
                            alert(tempObj.value);
                        }
                    }
                }
            }
        </script></head>
    <body>
        <form id="form1" runat="server">
        <div>
        </div>
        <asp:TreeView ID="TreeView1" runat="server">
        </asp:TreeView>
        <asp:TreeView ID="TreeView2" runat="server" ShowCheckBoxes="All" OnSelectedNodeChanged="TreeView1_SelectedNodeChanged">
            <Nodes>
                <asp:TreeNode Text="root" Value="root">
                    <asp:TreeNode Text="a" Value="a"></asp:TreeNode>
                </asp:TreeNode>
            </Nodes>
        </asp:TreeView>
        </form>
    </html>
      

  3.   

    public string GetInformation(string option, string paparcount)
        {
            StringBuilder bd = new StringBuilder();
            string sql="获取顶层菜单名称";
            DataTable tb = ado.GetDataSet(sql).Tables[0];
            bd.Append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"1\" style=\"width: 100%;font-size: 12px;\" bgcolor=\"#666699\" >");   
          
            for (int i = 0; i < tb.Rows.Count; i++)
            {//可以加上checkbox;
                bd.Append("<tr align=\"left\" bgcolor=\"#E8E8E8\" height=\"23px\">");
                bd.Append("   <td width=\"30px\" style=\"text-align: center\">" + tb.Rows[i][0].ToString() + "</td>");           
                bd.Append("</tr>");
                string str = " ";            
                str = "获取次级菜单名称";
                DataTable table = ado.GetDataSet(str).Tables[0];
                for (int j = 0; j < table.Rows.Count; j++)
                {                
                    bd.Append("<tr align=\"left\" bgcolor=\"#E8E8E8\" height=\"23px\">");
                    bd.Append("   <td style=\"text-align: center\">" + tb.Rows[j][0].ToString()+ "</td>");
                    bd.Append("</tr>");
                }
            }
            bd.Append("</table>");
            string information = bd.ToString();
            return information;
        }
    总体来说就是用循环将数据库读取的内容填充table,然后用字符串串起来付给一个节点显示
      

  4.   

    楼上的是什么代码啊?怎么那么长啊?看我的!public partial class BindTreeView : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {            departList = new List<Department>() {    
                    new Department{ ID = 1, ParentID= 0, Name=" 老总"},
                    new Department{ ID = 2, ParentID= 1, Name=" 市场副总"},
                    new Department{ ID = 3, ParentID= 1, Name=" 技术副总"},
                    new Department{ ID = 4, ParentID= 1, Name=" 行政副总"},
                    new Department{ ID = 5, ParentID= 2, Name=" 市场部"},
                    new Department{ ID = 6, ParentID= 4, Name=" 财务部"},
                    new Department{ ID = 7, ParentID= 4, Name=" 行政部"},
                    new Department{ ID = 8, ParentID= 3, Name=" C#技术部"},
                    new Department{ ID = 9, ParentID= 3, Name=" JAVA技术部"},
                    new Department{ ID = 10, ParentID= 9, Name=" J2EE技术部"},
                    new Department{ ID = 11, ParentID= 9, Name=" J2ME技术部"}
                };            TreeNode root = new TreeNode();            root.Text = this.departList[0].Name;
                root.Value = this.departList[0].ID.ToString();
                root.Checked = true;            this.TreeView1.Nodes.Add(root);            this.BindToTree(root);
            }        /// <summary>
            /// 对象列表
            /// </summary>
            private List<Department> departList;
            /// <summary>
            /// 绑定到树
            /// </summary>
            /// <param name="node"></param>
            private void BindToTree(TreeNode node)
            {
                if (node != null)
                {
                    var temp = from dept in departList
                               where dept.ParentID.ToString() == node.Value
                               select dept;                List<Department> tempList = temp.ToList<Department>();                tempList.ForEach(delegate(Department t)
                    {
                        TreeNode tnode = new TreeNode();
                        tnode.Text = t.Name;
                        tnode.Value = t.ID.ToString();
                        tnode.Checked = true;                    node.ChildNodes.Add(tnode);                    BindToTree(tnode);
                    });
                }
            }
        }
      

  5.   


    经典    treeview可以    要是不嫌麻烦就用JS
      

  6.   

    数据库结构:   
    menuID         content            parentID
      1             一级                 0 
      2             科技                 1 
      3             沈阳                 2 
      4             二级                 0 
      5             美食                 4 
      6             哈尔滨               5 
      7             三级                 0 
      8             美食                 7 
      9             大连                 8    private void LoadTree()
        {
            treeView1.Nodes.Clear();     //先清空树 
            DataTable dt = ds.Tables[0]; //把表结构从数据库查出来放到DataTable中 
            //循环绑定父节点 
            foreach (DataRow dr in dt.Rows)
            {
                //遍历加载父节点 
                if (Convert.ToInt32(dr["parentID"]) == 0)
                {
                    TreeNode newNode = new TreeNode();
                    newNode.Text = dr["content"].ToString();
                    newNode.NavigateUrl = "Switch.aspx?id=" + dr["menuID"].ToString();
                    newNode.Target = "main";
                    treeView1.Nodes.Add(newNode);                ChildLoad(dr, newNode.ChildNodes, dt);
                }
            }        this.treeView1.ExpandAll();
        }    //绑定子节点 
        private void ChildLoad(DataRow dr, TreeNodeCollection newNode, DataTable dt)
        {
            foreach (DataRow row in dt.Rows)
            {
                if (Convert.ToInt32(dr["menuID"]) == Convert.ToInt32(row["parentID"]))
                {
                    TreeNode childNode = new TreeNode();
                    childNode.Text = row["content"].ToString();
                    childNode.NavigateUrl = "Switch.aspx?id=" + row["menuID"].ToString();
                    childNode.Target = "main";
                    newNode.Add(childNode);                ChildLoad(row, childNode.ChildNodes, dt);   //递归子节点 
                }
            }
        }