关闭页面特效

ASP.NET通过递归添加树(Treeview)

先来看看效果,基本上就是这样的。

所谓树,无非就是2点,第一个:根节点,第二:叶子节点,其中叶子节点中还可能有叶子节点,但是根节点始终只有一个。

下面贴上 各部分的代码

1.PAGE_LOAD载入事件。

1
2
3
4
protected void Page_Load(object sender, EventArgs e)
{
    BindTree(); //绑定树
}

2.BindTree方法。

1
2
3
4
5
6
7
8
9
private void BindTree()
{
  DataSet  ds = new DataSet(); //这里的DS里不存在数据,具体情况请大家自己具体考虑,修改代码
     
    TreeView1.Nodes.Clear();
 
    AddTree("-1", (TreeNode)null,ds);
    TreeView1.Nodes[0].Expanded = true;
}

3.AddTree方法,递归添加树。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*其中ds对应的是一个实体类Model,里面的IndexName,IndexID等,都是对应着数据库里的相应字段所以我们在使用这个方法时前,必须先得到相对应的有具体意义的DataSet*/
 
 /// <summary>
    /// 递归树
    /// </summary>
    /// <param name="ParentID">当前节点父节点ID</param>
    /// <param name="pNode"></param>
    /// <param name="ds"></param>
private void AddTree(string ParentID, TreeNode pNode,DataSet ds)
    {
        DataView dvTree = new DataView(ds.Tables[0]); //用DataView来模拟DataTable,因为DV是虚拟的表,所以可以提高效率
        foreach (DataRowView Row in dvTree)
        {
            TreeNode node = new TreeNode();
            if (pNode == null)
            {         //添加根节点  
                node.Text = Row["IndexName"].ToString();
                node.Value = Row["IndexID"].ToString();
            
                if (Row["IndexClass"].ToString() == "0")
                {
                    node.NavigateUrl = "IndexInfo1.aspx?IndexID=" + node.Value;
                }
                else
                {
                    node.NavigateUrl = "IndexInfo2.aspx?IndexID=" + node.Value;
                }
                 
                node.Target = "mainFrame";
                node.Expanded = false;
                TreeView1.Nodes.Add(node);  //添加根节点
                AddTree(Row["IndexID"].ToString(), node,ds);         //递归,添加子节点,这段递归是必须的,不然只会添加根节点,而进不到下面的else语句,pNode在TreeView第二次执行以后都是不为空的,所以会一直跳到执行ELSE语句里的内容。  
                 
            }
            else
            {       //添加当前节点的子节点  
 
                node.Text = Row["IndexName"].ToString();
                node.Value = Row["IndexID"].ToString();
                node.ToolTip = node.Text;  
                if (Row["IndexClass"].ToString() == "0" || Row["IndexParentID"].ToString() == "-1")
                {
                     
                    node.NavigateUrl = "IndexInfo1.aspx?IndexID=" + node.Value;
                }
                else
                {
                    
                    node.NavigateUrl = "IndexInfo2.aspx?IndexID=" + node.Value;
                }
                 
                node.Target = "Frame1"; //某一个节点指向的一个IFRAME,里面可以是这个节点下的具体内容。
                //node.NavigateUrl = Request.Url.LocalPath + "?OrgID=" + Row["OrgID"].ToString();
                node.Expanded = false;
                pNode.ChildNodes.Add(node); //pNode为父节点,把Node作为子节点添加进去
                AddTree(Row["IndexID"].ToString(), node,ds);         //递归添加子节点
            }
 
        }
 
    }

  

 


__EOF__

作  者ღKawaii
出  处https://www.cnblogs.com/kmsfan/p/3612958.html
关于博主:一个普通的小码农,为了梦想奋斗
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   yangliwen  阅读(4778)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
1
0
关注
跳至底部
document.getElementById("homeTopTitle").innerText="ღKawaii";
点击右上角即可分享
微信分享提示