目录树至少有四级,初始化从数据库中读取所有数据动态生成TreeView目录,然后可以根据查询条件生成相应的树型结构,并指定节点相应的链接页面.
现在存在的问题是,生成出来的节点查询后无法动态生成相应链接,而且初始化生成的节点链接的ID值都不正确.(代码如下)
    //递归绑定同一个表数据
    private void InitTree()
    {
        DataTable dt = GetTreeViewTable();
        DataView dv = new DataView(dt);        string Gvalue, bvalue, dvalue, hvalue;
        Gvalue = DwGdj.SelectedValue.ToString();
        bvalue = DwBdz.SelectedValue.ToString();
        dvalue = Dwdy.SelectedValue.ToString();
        hvalue = Dwhy.SelectedValue.ToString();        if (Gvalue != "") { dv.RowFilter = "SubBureauid='" + Gvalue + "'"; }
        if (bvalue != "") { dv.RowFilter = "tsid='" + bvalue + "'"; }
        if (dvalue != "") { dv.RowFilter = "vrid='" + dvalue + "'"; }
        if (hvalue != "") { dv.RowFilter = "tradeid='" + hvalue + "'"; }
        if (Gvalue == "" & bvalue == "" & dvalue == "" & hvalue == "") { dv.RowFilter = "[Parent]='0'"; }        string sUrl = string.Empty;
        foreach (DataRowView drv in dv)
        {
            TreeNode node = new TreeNode();
            if (WasteGroup.Checked == true)
            {
                node.Text = drv["WGName"].ToString();
                node.Value = drv["WGid"].ToString();
                node.ToolTip = drv["WGName"].ToString();
            }
            if(TotalGroup.Checked == true)
            {
                node.Text = drv["SGName"].ToString();
                node.Value = drv["SGid"].ToString();
                node.ToolTip = drv["SGName"].ToString();
             }
            node.Expanded = true;
            TreeGroup.Nodes.Add(node);
            AddReplies(dt,node);
        }
    }
    
    //获取查询条件并将结果赋给DataTable
    private DataTable GetTreeViewTable()
    {
        string Gvalue, bvalue, dvalue, hvalue;
        Gvalue = DwGdj.SelectedValue.ToString();
        bvalue = DwBdz.SelectedValue.ToString();
        dvalue = Dwdy.SelectedValue.ToString();
        hvalue = Dwhy.SelectedValue.ToString();        string TableName="";
        if (WasteGroup.Checked == true) { TableName = "WasteGroup"; }else{ TableName = "StatisticGroup"; }
        SqlConnection strconn = Conn.CreateConnection();
        strconn.Open();
        string sql = "select * from " + TableName +" where 1=1 ";
        if (Gvalue != "") { sql = sql + "And SubBureauid =" + Gvalue; }
        if (bvalue != "") { sql = sql + "And tsid =" + bvalue; }
        if (dvalue != "") { sql = sql + "And vrid =" + dvalue; }
        if (hvalue != "") { sql = sql + "And tradeid =" + hvalue; }        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = new SqlCommand(sql, strconn);
        DataTable dt = new DataTable();
        da.Fill(dt);
        strconn.Close();
        return dt;
    }    //生成目录树
    private void AddReplies(DataTable dt, TreeNode node)
    {
        string sUrl = string.Empty;
        DataView dv = new DataView(dt);
        dv.RowFilter = "[Parent]='"+node.Value+"'";
        foreach (DataRowView row in dv)
        {
            TreeNode replyNode = new TreeNode();
            if (WasteGroup.Checked == true)
            {
                replyNode.Text = row["WGName"].ToString();
                replyNode.Value = row["WGid"].ToString();
                replyNode.ToolTip = row["WGName"].ToString();
                string wgid = row["wgid"].ToString();
                sUrl = "GroupView.aspx?id=" + row["WGid"].ToString() + "&Name=" + row["WGName"].ToString() + "&tid=" + "1";
            }
            else
            {
                replyNode.Text = row["SGName"].ToString();
                replyNode.Value = row["SGid"].ToString();
                replyNode.ToolTip = row["SGName"].ToString();
                sUrl = "GroupView.aspx?id=" + row["SGid"].ToString() + "&Name=" + row["SGName"].ToString() + "&tid=" +"0";
            }
            replyNode.Expanded = true;
            node.NavigateUrl = sUrl;
            node.Target = "mainFrame";
            node.ChildNodes.Add(replyNode);
            if (node.ChildNodes.Count > 0)
            {
                for (int j = 0; j < node.ChildNodes.Count; j++)
                {
                    node.ChildNodes[j].NavigateUrl = sUrl;
                    node.ChildNodes[j].Target = "mainFrame";
                }
            } 
            AddReplies(dt,replyNode);
        }
    }