请附上详细的表设计和代码注释!!!能帮我解决问题的我给满分!!!!

解决方案 »

  1.   


    private void CreatTree()
    {
       if(......)
        {
           CreatTree();
         }
    }
      

  2.   

    id parentID 这两个就够了具体例子http://topic.csdn.net/u/20100409/20/27ad9fb5-6301-4aaa-9d25-cda7ee503362.html
      

  3.   

     /// <summary>
            /// 绑定TreeView控件
            /// </summary>
            /// <param name="tree">要绑定的控件ID</param>
            /// <param name="table">数据表</param>
            /// <param name="ValueField">id字段</param>
            /// <param name="PValueField">父级ID字段</param>
            /// <param name="TextField">显示文本字段</param>
            /// <param name="PID">绑定的数据最高级ID</param>
            /// <returns>TreeView</returns>
            public static TreeView getTreeView(TreeView tree, DataTable table, string ValueField, string PValueField, string TextField, int PID)
            {
                tree.Nodes.Clear();
                DataView dv = new DataView(table);
                dv.RowFilter = ValueField + "=" + PID;
                if (dv.Count == 0)
                {
                    dv.RowFilter = PValueField + "=" + PID;
                }
                for (int i = 0; i < dv.Count; i++)
                {
                    TreeNode Node = new TreeNode();
                    Node.Value = dv[i][ValueField].ToString().Trim();
                    Node.Text = dv[i][TextField].ToString();
                    bangdingtree(table, ValueField, PValueField, TextField, Node);
                    tree.Nodes.Add(Node);
                }
                return tree;
            }        private static void bangdingtree(DataTable table, string ValueField, string PValueField, string TextField, TreeNode PNode)
            {
                DataView dv = new DataView(table);
                dv.RowFilter = PValueField + "=" + PNode.Value.ToString();
                for (int i = 0; i < dv.Count; i++)
                {
                    TreeNode Node = new TreeNode();
                    Node.Value = dv[i][ValueField].ToString().Trim();
                    Node.Text = dv[i][TextField].ToString();
                    bangdingtree(table, ValueField, PValueField, TextField, Node);
                    PNode.ChildNodes.Add(Node);            }
            }
      

  4.   

    namespace Tree
    {
        public partial class _Default : System.Web.UI.Page
        {
            string StrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/") + "b.mdb";
           
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    LoadData();
                }
            }        private void LoadData()
            {            OleDbConnection cn = new OleDbConnection(StrConn);
                cn.Open();
                OleDbCommand cmd = new OleDbCommand("select * from D where DID=PID", cn);
                OleDbDataReader read = cmd.ExecuteReader();
                while (read.Read())
                {
                    MyTreeView.Nodes.Clear();
                    TreeNode part = new TreeNode();
                    part.Expanded = true;
                    part.Text = read["DName"].ToString();
                    part.Value = read["DId"].ToString();
                    MyTreeView.Nodes.Add(part);
                    FillFolderNode(read["DId"].ToString(), part);
                }
                read.Close();
                cn.Close();        }        private void FillFolderNode(string p, TreeNode part)
            {
               
                OleDbConnection cn = new OleDbConnection(StrConn);
                cn.Open();
                OleDbCommand cmd = new OleDbCommand("select * from D where PID=" + p + " and  DID<>PID", cn);
                OleDbDataReader read = cmd.ExecuteReader();
                while (read.Read())
                {                TreeNode parts = new TreeNode();
                    parts.Expanded = false;
                    parts.Text = read["DName"].ToString();
                    parts.Value = read["DId"].ToString();
                    part.ChildNodes.Add(parts);
                    FillFolderNode1(read["DId"].ToString(), parts);            }
                read.Close();
                cn.Close();
            }        private void FillFolderNode1(string p, TreeNode part)
            {
                
                OleDbConnection cn = new OleDbConnection(StrConn);
                cn.Open();
                OleDbCommand cmd = new OleDbCommand("select * from D where DID=" + p + " and  DID<>PID", cn);
                OleDbDataReader read = cmd.ExecuteReader();
                while (read.Read())
                {                TreeNode parts = new TreeNode();
                    parts.Expanded = false;
                    parts.Text = read["DName"].ToString();
                    parts.Value = read["DId"].ToString();
                    part.ChildNodes.Add(parts);            }
                read.Close();
                cn.Close();
            }        protected void MyTreeView_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
            {
                string id = e.Node.Value;
                TreeNode subnode = e.Node;
                subnode.ChildNodes.Clear();//删除以前的,然后才可向下添加两级
                FillFolderNode(id, subnode);
            }        protected void MyTreeView_SelectedNodeChanged(object sender, EventArgs e)
            {
                string id = MyTreeView.SelectedNode.Value;
                MyTreeView.SelectedNode.Expanded = true;
                TreeNode subnode = MyTreeView.SelectedNode;//当前节点
                subnode.ChildNodes.Clear();//删除以前的,然后才可向下添加两级
                FillFolderNode(id, subnode);            Response.Write("<script>window.open('t.aspx?id=" + id + "');</script>");
            }
        }
    }
      

  5.   

     public void BindTreeView(string TargetFrame, DataTable dt, string aa)
        {        DataRow[] drs = dt.Select("quanxianid='" + quanxianid+ "'and Cid= " + 0);// 选出所有子节点
                  TreeView1.Nodes.Clear(); // 清空树
            foreach (DataRow r in drs)
            {
                string nodeid = r["id"].ToString();
                string text = r["mingcheng"].ToString();
                string parentid = r["Cid"].ToString();
                string url = r["Url"].ToString();
                string imageurl = r["ImageUrl"].ToString();
                string framename = TargetFrame;
                this.TreeView1.Font.Name = "宋体";
                this.TreeView1.Font.Size = FontUnit.Parse("9");            TreeNode rootnode = new TreeNode();
                rootnode.Text = text;
                rootnode.Value = nodeid;
                rootnode.NavigateUrl = url;
                rootnode.Target = framename;
                rootnode.Expanded = menuExpand;
                rootnode.ImageUrl = imageurl;
                rootnode.SelectAction = TreeNodeSelectAction.Expand;//和ASP.NET1.1中TREEVIEW的SelectExpands属性等效                   TreeView1.Nodes.Add(rootnode);
                int sonparentid = int.Parse(nodeid);
                CreateNode(framename, sonparentid, rootnode, dt, aa);         
            }    }    //邦定任意节点
        public void CreateNode(string TargetFrame, int parentid, TreeNode parentnode, DataTable dt, string aa)
        {       
            DataRow[] drs = dt.Select("quanxianid='" + quanxianid+ "' and Cid= " + parentid);//选出所有子节点
            foreach (DataRow r in drs)
            {
                string nodeid = r["id"].ToString();
                string text = r["mingcheng"].ToString();
                string url = r["Url"].ToString();
                string imageurl = r["ImageUrl"].ToString();
                string framename = TargetFrame;            TreeNode node = new TreeNode();
                node.Text = text;
                node.Value = nodeid;
                node.NavigateUrl = url;
                node.Target = TargetFrame;
                node.ImageUrl = imageurl;
                node.SelectAction = TreeNodeSelectAction.Expand; //和ASP.NET1.1中TREEVIEW的SelectExpands属性等效
                int sonparentid = int.Parse(nodeid);
                if (parentnode == null)
                {
                    TreeView1.Nodes.Clear();
                    parentnode = new TreeNode();
                    TreeView1.Nodes.Add(parentnode);
                }
                parentnode.ChildNodes.Add(node);
                CreateNode(framename, sonparentid, node, dt, aa);
               
            }     }
      

  6.   

    输入为dataset,数据结构是三列:字段代码、字段显示文本、上级节点的字段代码
    树结构在点击展开时才加载点击节点的子节点
    private DataSet inputTreeData;
            private string _selectedNodeValue = "";
            private string _selectedNodeValueCode = "";        public string selectedNodeValue
            {
                get { return _selectedNodeValue; }
                //set { selectedNodeValue = value; }
            }
            public string selectedNodeValueCode
            {
                get { return _selectedNodeValueCode; }
                //set { selectedNodeValueCode = value; }
            }        //构造函数重构
            public treeChooseWindow(DataSet input)
            {
                InitializeComponent();
                inputTreeData = input;
                treeCreat(input);
                this.StartPosition = FormStartPosition.CenterParent;
            }        //创建树结构
            private void treeCreat(DataSet inputTreeData)
            {
                try
                {
                    DataTable table = inputTreeData.Tables[0];
                    if (table.Columns.Count == 2)
                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                            DataRow row = table.Rows[i];
                            codeTree.Nodes.Add(row[0].ToString(), row[1].ToString());
                        }
                    else
                        for (int i = 0; i < table.Rows.Count; i++)
                        {
                            DataRow row = table.Rows[i];
                            if (row[2].ToString() == "" || row[2].ToString() == row[0].ToString())//如果没有上级节点直接添加,有上级节点需要在点击时才添加
                                codeTree.Nodes.Add(row[0].ToString(), row[1].ToString());
                        }
                }
                catch (Exception ee)
                {
                    MessageBox.Show("传入的数据结构与要求的结构不符合,或包含不存在的上级节点");
                }
            }        private void codeTree_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                codeTree.SelectedNode.Collapse();
                codeTree.SelectedNode = e.Node;
                if (codeTree.SelectedNode.Nodes.Count == 0)
                {
                    try
                    {
                        DataTable table = inputTreeData.Tables[0];
                        if (table.Columns.Count == 2)
                            return;
                        else
                        {
                            for (int i = 0; i < table.Rows.Count; i++)
                            {
                                DataRow row = table.Rows[i];
                                if (row[2].ToString() == codeTree.SelectedNode.Name)
                                    codeTree.SelectedNode.Nodes.Add(row[0].ToString(), row[1].ToString());
                            }
                        }
                    }
                    catch (Exception ee)
                    {
                        MessageBox.Show("传入的数据结构与要求的结构不符合,或包含不存在的上级节点");
                    }
                }
                codeTree.SelectedNode.Expand();
            }
      

  7.   

    我这里有一个,以VS设计器生成的菜单项为数据源,用剃归创建相应菜单树的函数。楼主看看有没有用。
    数据结构挺简单的就是MenuItem, MenuItem.DropDownItems。
    你要向上的话,就是MenuItem,ParentMenuItem.
    存储在表中就是ID,ParentID,NodeContent。        //用递归的方法取得菜单项上的所有项在TreeView控件上以Node方式显示,并且Clone他们的Name作为唯一标识
          //tmpMenuItems为设计生成的菜单数据,每一个winApp包含菜单的程序都会有这个数据放在窗体组件的位置,与BindDataSource等一样。
          //parentNode是父结点
            public TreeNode addMenuItemToTreeView(ToolStripItemCollection tmpMenuItems, TreeNode parentNode)
            {            foreach (ToolStripItem tmpItem in tmpMenuItems)
                {                ToolStripMenuItem tmpMenu;
                    if (tmpItem.GetType().ToString() == "System.Windows.Forms.ToolStripSeparator")
                    {
                        continue;
                    }
                    else
                    {
                        tmpMenu = (ToolStripMenuItem)tmpItem;
                    }
                    //过滤掉分隔符号
                    if (tmpMenu.Text == "-")
                    {
                        continue;
                    }
                   
                    if (tmpMenu.DropDownItems.Count > 0)
                    { //树干作为parent给下一层
                        TreeNode curNode = new TreeNode(tmpMenu.Text);
                        ToolStripMenuItem tt = (ToolStripMenuItem)tmpMenu;
                        curNode.Name = tmpItem.Name;
                        curNode.Tag = tt.Text;                    //curNode.Tag = tmpMenu.OwnerItem.ToString();
                        //递归调用
                        parentNode.Nodes.Add(addMenuItemToTreeView(tmpMenu.DropDownItems, curNode));                }
                    else
                    { //树叶子返回
                        TreeNode lastNode = new TreeNode(tmpMenu.Text);
                        lastNode.Name = tmpMenu.Name;
                        //if(tmpMenu.is)
                        //{
                        ToolStripMenuItem tt = (ToolStripMenuItem)tmpMenu.OwnerItem;
                        lastNode.Tag = tt.Text;
                        //}
                        parentNode.Nodes.Add(lastNode);
                    }
                }
                return parentNode;        }