表结构
  父ID  INT
  子ID   INT
部门编号   varchar(20)
部门名称   varchar(30)
我想用部门结构表中数据在表示层用树结构来显示
在asp.net 2.0不知道怎么写
方法最好不要是msdn中在 TreeView 控件中显示分层数据 
请大家帮忙
谢谢

解决方案 »

  1.   

    用递归
    你搜索一下treeview有很多的
      

  2.   

    参考:
    http://www.microsoft.com/china/community/Column/30.mspx
      

  3.   

    2003与2005有一定的区别
    谁能给个2005 treeview 例子吗
      

  4.   

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>Untitled Page</title>
    <script language="javascript">
    function chkAll()
    {     
    var chkall= document.all["chkall"];
    var chkother= document.getElementsByTagName("input");
    for (var i=0;i<chkother.length;i++)
    {
    if( chkother[i].type=='checkbox')
    {
    if(chkother[i].id.indexOf('TreeView1')>-1)
    {
    if(chkall.checked==true)
    {
    chkother[i].checked=true;
    }
    else
    {
    chkother[i].checked=false;
    }
    }
    }
    }
    }
    </script>
    </head>
    <body>
        <form id="form1" runat="server">
        
             <table width="100%" height="100%">
                <tr height="10">
                    <td><input id="chkall" type="checkbox" onclick="chkAll();" />全选/取消</td>
                </tr>            
            </table>    </form>
    </body>
    </html>//cs********************************
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //BindTree();
                InitTree();
                //this.TreeView1.Attributes.Add("ondragstart", "nodeclick();");
                this.TreeView1.Attributes.Add("onclick", "return tree_oncheck(this);");
            }
        }    #region 主从表绑定
        private void BindTree()
        {
            DataSet dst = GetTreeViewData();
            TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
            foreach (DataRow masterRow in dst.Tables["province"].Rows)
            {
                TreeNode masterNode = new TreeNode((string)masterRow["province"]);
                TreeView1.Nodes.Add(masterNode);
                foreach (DataRow childRow in masterRow.GetChildRows("Children"))
                {
                    TreeNode childNode =new TreeNode((string)childRow["city"]);
                    masterNode.Expanded = false;
                    masterNode.ChildNodes.Add(childNode);
                }
            }
        }    private DataSet GetTreeViewData()
        {
            string constring = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
            SqlConnection con = new SqlConnection(constring);
            SqlDataAdapter daprovince = new SqlDataAdapter("SELECT * FROM province", con);
            SqlDataAdapter dacity = new SqlDataAdapter("SELECT * FROM city", con);
            DataSet ds = new DataSet();
            daprovince.Fill(ds, "province");
            dacity.Fill(ds, "city");
            ds.Relations.Add("Children", ds.Tables["province"].Columns["provinceid"], ds.Tables["city"].Columns["father"]);
            return ds;
        }
        #endregion    #region 递归绑定同一个表数据
        private void InitTree()
        {
            DataTable dt = GetTreeViewTable();
            DataView dv = new DataView(dt);
            dv.RowFilter = "ParentID=0";
            TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
            foreach (DataRowView drv in dv)
            {
                TreeNode node = new TreeNode();
                node.Text = drv["Subject"].ToString();
                node.Value = drv["ID"].ToString();           
                node.Expanded = false;
                TreeView1.Nodes.Add(node);
                AddReplies(dt,node);
            }
        }    private DataTable GetTreeViewTable()
        {
            string constring = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
            SqlConnection con = new SqlConnection(constring);
            SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tree", con);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }    private void AddReplies(DataTable dt, TreeNode node)
        {
            DataView dv = new DataView(dt);
            dv.RowFilter = "ParentID=" + node.Value;
            foreach (DataRowView drv in dv)
            {
                TreeNode replyNode = new TreeNode();
                replyNode.Text = drv["Subject"].ToString();
                replyNode.Value = drv["ID"].ToString();           
                replyNode.Expanded = false;
                node.ChildNodes.Add(replyNode);
                AddReplies(dt,replyNode);
            }
        }
        #endregion
      

  5.   

    表结构if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Tree]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[Tree]
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[city]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[city]
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[province]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[province]
    GOCREATE TABLE [dbo].[Tree] (
    [ID] [int] NULL ,
    [ParentID] [int] NULL ,
    [Subject] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
    [Url] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[city] (
    [id] [int] NOT NULL ,
    [cityID] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL ,
    [city] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [father] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GOCREATE TABLE [dbo].[province] (
    [id] [int] NOT NULL ,
    [provinceID] [nvarchar] (6) COLLATE Chinese_PRC_CI_AS NULL ,
    [province] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO
      

  6.   

    http://www.microsoft.com/china/community/Column/30.mspx
    在2005里
    把这句话//pNode.Nodes.Add(Node);改成pNode.ChildNodes.Add(Node);就可以了,测试过OK
      

  7.   

    protected void TreeViewdatail(int subId, TreeNode pNode)
        {
            DataTable ds = (new Command()).getdapte();
            DataView dv = ds.DefaultView;
            dv.RowFilter = "subId=" + subId;
            foreach (DataRowView Row in dv)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                {    //添加根节点
                    Node.Text = Row["DepartmentName"].ToString();
                    TreeView1.Nodes.Add(Node);
                    Node.Expanded = true;
                    TreeViewdatail(Int32.Parse(Row["numid"].ToString()), Node);    //再次递归
                }
                else
                {   //&#768;添加当前节点的子节点
                    Node.Text = Row["DepartmentName"].ToString();
                    pNode.ChildNodes.Add(Node);
                    Node.Expanded = true;
                    TreeViewdatail(Int32.Parse(Row["numid"].ToString()), Node);     //再次递归
                }
            }
        }
    这改成这样的方式还是不行
     dv.RowFilter = "subId=" + subId;
    报错
      

  8.   

    initTree(0, (TreeNode)null);
     protected void initTree(int nFatherid, TreeNode fatherNode)
        {        DataTable dat = (new Command()).getdapte();
            DataView dv = dat.DefaultView;
            dv.RowFilter = "[parentID] = " + nFatherid;        foreach (DataRowView Row in dv)
            {
                TreeNode node = new TreeNode();
                if (fatherNode == null)//根节点
                {
                    node.Text = Row["DepartmentName"].ToString();
                    TreeView1.Nodes.Add(node);
                    initTree(Int32.Parse(Row["NumID"].ToString()), node);    //再次递归
                    }
                else
                {
                    node.Text = Row["DepartmentName"].ToString();
                    node.Value = Row["NumID"].ToString();      
                    fatherNode.ChildNodes.Add(node);
                    initTree(Int32.Parse(Row["NumID"].ToString()), node);//递归
                }
            }    }
    为什么运行以后没有报任何错,在表示层就显示出东西
      

  9.   

    dv.RowFilter = "subId=" + subId;  //出错语句dv.RowFilter = "[parentID] = " + nFatherid; 可能是因为数据库里的字段名字是parentID,而你把它改成了
    subId,仔细检查,程序没什么问题.
      

  10.   

    dv.RowFilter = "[parentID] = " + nFatherid; 
    这是修改以后
    就是没有显示结果