当前位置:编程学习 > C#/ASP.NET >>

treeView实现了无限分类,节点链接问题?

我做了一个treeView的无限分类,节点链接想实现的效果是点击一个节点,查询出此节点下的所有子节点下的产品,包括子节点下的子节点,比如我点击“数码品牌”,查出来的各式各样的手机产品和电脑产品,请问怎么实现???我目前做的链接只能查出节点下的子节点,比如点击“数码品牌”,只能查出“手机”和“电脑”,不能查出“诺基亚”产品和“三星”产品等



界面基本效果如下:

数码品牌
   手机
     诺基亚
     三星
   电脑
     显示器
     机箱
生活用品


数据库只有一个表tree,4个字段分别为:id,Powername,ParentId,Layer


cs代码如下:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            this.AddTreeNodes();//添加树节点
            this.MenuNodes();//添加菜单节点
        }
    }
    private void AddTreeNodes()
    {//添加树节点
        DataView dv = drv("select * from tree where ParentId=0");
        foreach (DataRowView datav in dv)
        {
            TreeNode tn = new TreeNode();
            tn.Text = datav["PowerName"].ToString();
            tn.Value = datav["id"].ToString();
            tn.Expanded = false;
            TreeView1.Nodes.Add(tn);
            AddchildNodes(tn);
            if (tn.ChildNodes.Count == 0)//判断是否有子节点
            {
                tn.NavigateUrl = "product.aspx?id=" + tn.Value;
            }
        }
    }
    private DataView drv(string sques)
    {
        SqlConnection con = new SqlConnection("server=.;database=login;uid=sa;pwd=;");
        con.Open();
        SqlDataAdapter sdr = new SqlDataAdapter();
        sdr.SelectCommand = new SqlCommand(sques,con);
        DataSet ds = new DataSet();
        sdr.Fill(ds,"tree");
        return ds.Tables["tree"].DefaultView;
    }
    private void AddchildNodes(TreeNode tn)
    {//添加树子节点
        int bid = Convert.ToInt32(tn.Value);
        DataView dv = drv("select * from tree where ParentId=" + bid + "");
        foreach (DataRowView datav in dv)
        {
            TreeNode ctn = new TreeNode();
            ctn.Text = datav["PowerName"].ToString();
            ctn.Value = datav["id"].ToString();
            int ParentID = Convert.ToInt32(datav["ParentId"]);
            ctn.Expanded = false;
            tn.ChildNodes.Add(ctn);
            AddchildNodes(ctn);
            if (ctn.ChildNodes.Count == 0)//判断是否有子节点
            {
                ctn.NavigateUrl = "product.aspx?id=" + ctn.Value;
            }
        }
    } --------------------编程问答-------------------- 在 TreeNodeExpanded 事件中写上 
protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
    {
        TreeView1.SelectedNode.ExpandAll();

    }
就可以了。
当然,前提是你有选中的NODE。 --------------------编程问答-------------------- http://www.cnblogs.com/time-is-life/articles/329691.html --------------------编程问答-------------------- mark --------------------编程问答-------------------- 大家没有看明白我的意思,不是展开子节点,我要实现的是从数据库中查询,也就是说查询条件怎么写? --------------------编程问答-------------------- 我有一段代码 可能对你有帮助

    void PopulateCategories(TreeNode node)
    {
        DataSet ds = new DataSet();
        string m_connectionStr = ConfigurationManager.ConnectionStrings["ehPublicConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(m_connectionStr);
        conn.Open();
        SqlCommand comm = new SqlCommand("select Id,ProvinceName from Provinces", conn);
        comm.CommandType = CommandType.Text;
        SqlDataAdapter sda = new SqlDataAdapter(comm);
        sda.Fill(ds);
        conn.Close();

        if (ds.Tables.Count > 0)
        {
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                TreeNode NewNode = new TreeNode(row["ProvinceName"].ToString(), row["Id"].ToString());
                NewNode.PopulateOnDemand = true;
                NewNode.Collapse();
                NewNode.SelectAction = TreeNodeSelectAction.Expand;
                node.ChildNodes.Add(NewNode);
            }
        }

    }
    void PopulateProducts(TreeNode node)
    {
        DataSet ds = new DataSet();
        string m_connectionStr = ConfigurationManager.ConnectionStrings["ehPublicConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(m_connectionStr);
        conn.Open();
        SqlCommand comm = new SqlCommand("select CityName from Citys where ProvinceId=@Id", conn);
        comm.CommandType = CommandType.Text;
        comm.Parameters.Add("@id", SqlDbType.Int).Value = node.Value;
        SqlDataAdapter sda = new SqlDataAdapter(comm);
        sda.Fill(ds);
        conn.Close();

        if (ds.Tables.Count > 0)
        {
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                TreeNode NewNode = new TreeNode(row["CityName"].ToString());
                NewNode.PopulateOnDemand = false;
                NewNode.NavigateUrl = row["CityName"].ToString();
                node.ChildNodes.Add(NewNode);
            }
        }
    }
    protected void TreeView1_TreeNodePopulate1(object sender, TreeNodeEventArgs e)
    {
        if (e.Node.ChildNodes.Count == 0)
        {
            switch (e.Node.Depth)
            {
                case 0:
                    PopulateCategories(e.Node);
                    break;
                case 1:
                    PopulateProducts(e.Node);
                    break;
            }
        }
    }

--------------------编程问答-------------------- 楼上可以留下你的联系方式吗?
有几个问题还要请教 --------------------编程问答-------------------- 楼上的代码我也看过了,链接还是不能达到要求 --------------------编程问答-------------------- up
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,