.net之旅-树型结构及相关功能的实现(41)

时间:2022-05-03 13:00:16

 

树型结构一直是我们常用的结构。本文将详细具体的对其进行实现。

数据库是SQL server 2000。

webconfig的数据库配置内容:

  <appSettings>
    <add key="DatabaseConnStr" value="server=localhost;uid=sa;pwd=123456;database=infoFlat" />
  </appSettings>

其中的数据库设计:

sysFunction表:

   名称 类型 长度 说明

1 FunctionId int 4 0
0 FunctionName varchar 50 0
0 ParentFunctionId int 4 0

内容如下:

 1 系统功能 0
 2 信息中心 1
 3 新闻 2
 4 通知 2
 5 公告 2
 6 项目中心 1
 7 申报 6
 8 审批 6
 9 过程 6
 10 结题 6
 11 产品中心 1
 12 在研产品 11
   

具体代码:

1 file:///H:/infoFlat/InterFace/Left.aspx 树型结构页面

.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Left.aspx.cs" Inherits="InterFace_Left" %>
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
<html xmlns="http://www.w3.org/1999/xhtml" >
.net之旅-树型结构及相关功能的实现(41)
<head runat="server">
.net之旅-树型结构及相关功能的实现(41)    
<title>功能列表</title>
.net之旅-树型结构及相关功能的实现(41)
</head>
.net之旅-树型结构及相关功能的实现(41)
<body>
.net之旅-树型结构及相关功能的实现(41)    
<form id="formFuncList" runat="server">
.net之旅-树型结构及相关功能的实现(41)         
<div>
.net之旅-树型结构及相关功能的实现(41)            
<asp:Label ID="LabelUserId" runat="server" Text="Label"></asp:Label>
.net之旅-树型结构及相关功能的实现(41)             
<br />
.net之旅-树型结构及相关功能的实现(41)             
<asp:TreeView ID="TreeViewFuncList" runat="server" ShowLines="True">
.net之旅-树型结构及相关功能的实现(41)             
</asp:TreeView>
.net之旅-树型结构及相关功能的实现(41)         
</div>
.net之旅-树型结构及相关功能的实现(41)    
</form>
.net之旅-树型结构及相关功能的实现(41)
</body>
.net之旅-树型结构及相关功能的实现(41)
</html>
.net之旅-树型结构及相关功能的实现(41)

 2 file:///H:/infoFlat/App_Code/Database/DbConn.cs 数据库连接

.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)/// ************************************************************
.net之旅-树型结构及相关功能的实现(41)
/// Copyright (C), 2006-2007, GUET.
.net之旅-树型结构及相关功能的实现(41)
/// FileName: Index.aspx.cs
.net之旅-树型结构及相关功能的实现(41)
/// Author: longronglin
.net之旅-树型结构及相关功能的实现(41)
/// Version : 1.0
.net之旅-树型结构及相关功能的实现(41)
/// Date: 2007-01-23
.net之旅-树型结构及相关功能的实现(41)
/// Description:      
.net之旅-树型结构及相关功能的实现(41)
/// Function List:   
.net之旅-树型结构及相关功能的实现(41)
///     1. 
.net之旅-树型结构及相关功能的实现(41)
///     2. 
.net之旅-树型结构及相关功能的实现(41)
///     3.  
.net之旅-树型结构及相关功能的实现(41)
/// History:      
.net之旅-树型结构及相关功能的实现(41)
///      <author> <time> <version> <desc>
.net之旅-树型结构及相关功能的实现(41)
///      longronglin    2007/01/23     1.0      modify xxx . 
.net之旅-树型结构及相关功能的实现(41)
/// *************************************************************

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
using System;
.net之旅-树型结构及相关功能的实现(41)
using System.Data;
.net之旅-树型结构及相关功能的实现(41)
using System.Configuration;
.net之旅-树型结构及相关功能的实现(41)
using System.Web;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.Security;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.UI;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.UI.WebControls;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.UI.WebControls.WebParts;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.UI.HtmlControls;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
using System.Data.SqlClient;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
namespace infoFlat.App_Code.Database
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)
{
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)    
/// <summary>
.net之旅-树型结构及相关功能的实现(41)    
/// Summary description for DbConn
.net之旅-树型结构及相关功能的实现(41)    
/// </summary>

.net之旅-树型结构及相关功能的实现(41)    public class DbConn : IDisposable
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)    
{
.net之旅-树型结构及相关功能的实现(41)        
// 数据库连接
.net之旅-树型结构及相关功能的实现(41)
        private static SqlConnection conn;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)        
public DbConn()
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            
//
.net之旅-树型结构及相关功能的实现(41)
        }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
/// <summary>
.net之旅-树型结构及相关功能的实现(41)        
/// 获取数据库连接并打开
.net之旅-树型结构及相关功能的实现(41)        
/// </summary>

.net之旅-树型结构及相关功能的实现(41)        public static SqlConnection GetConn()
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            
// 获取数据库连接
.net之旅-树型结构及相关功能的实现(41)
            if (conn == null)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)            
{
.net之旅-树型结构及相关功能的实现(41)                
// DatabaseConnStr为web.config对应的appSettings设置
.net之旅-树型结构及相关功能的实现(41)
                conn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["DatabaseConnStr"]);
.net之旅-树型结构及相关功能的实现(41)            }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)            
// 打开数据库连接
.net之旅-树型结构及相关功能的实现(41)
            if (conn.State == System.Data.ConnectionState.Closed)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)            
{
.net之旅-树型结构及相关功能的实现(41)                conn.Open();
.net之旅-树型结构及相关功能的实现(41)            }
 
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)            
return conn;
.net之旅-树型结构及相关功能的实现(41)        }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
/// <summary>
.net之旅-树型结构及相关功能的实现(41)        
/// 释放资源
.net之旅-树型结构及相关功能的实现(41)        
/// </summary>

.net之旅-树型结构及相关功能的实现(41)        public void Dispose()
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            
// 确认连接是否已经关闭
.net之旅-树型结构及相关功能的实现(41)
            if (conn != null)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)            
{
.net之旅-树型结构及相关功能的实现(41)                conn.Dispose();
.net之旅-树型结构及相关功能的实现(41)                conn 
= null;
.net之旅-树型结构及相关功能的实现(41)            }

.net之旅-树型结构及相关功能的实现(41)        }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)    }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)}

.net之旅-树型结构及相关功能的实现(41)

3 file:///H:/infoFlat/InterFace/Left.aspx.cs Left对应的代码:

.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)/// ************************************************************
.net之旅-树型结构及相关功能的实现(41)
/// Copyright (C), 2006-2007, GUET.
.net之旅-树型结构及相关功能的实现(41)
/// FileName: Index.aspx.cs
.net之旅-树型结构及相关功能的实现(41)
/// Author: longronglin
.net之旅-树型结构及相关功能的实现(41)
/// Version : 1.0
.net之旅-树型结构及相关功能的实现(41)
/// Date: 2007-01-24
.net之旅-树型结构及相关功能的实现(41)
/// Description:      
.net之旅-树型结构及相关功能的实现(41)
/// Function List:   
.net之旅-树型结构及相关功能的实现(41)
///     1. void Page_Load()
.net之旅-树型结构及相关功能的实现(41)
///     2. 
.net之旅-树型结构及相关功能的实现(41)
///     3. 
.net之旅-树型结构及相关功能的实现(41)
/// History:      
.net之旅-树型结构及相关功能的实现(41)
///      <author> <time> <version> <desc>
.net之旅-树型结构及相关功能的实现(41)
///      longronglin    2007/01/24     1.0      modify xxx . 
.net之旅-树型结构及相关功能的实现(41)
/// *************************************************************

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
using System;
.net之旅-树型结构及相关功能的实现(41)
using System.Data;
.net之旅-树型结构及相关功能的实现(41)
using System.Configuration;
.net之旅-树型结构及相关功能的实现(41)
using System.Collections;
.net之旅-树型结构及相关功能的实现(41)
using System.Web;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.Security;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.UI;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.UI.WebControls;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.UI.WebControls.WebParts;
.net之旅-树型结构及相关功能的实现(41)
using System.Web.UI.HtmlControls;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
using System.Data.SqlClient;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
using infoFlat.App_Code.Database;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)
public partial class InterFace_Left : System.Web.UI.Page
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)
{
.net之旅-树型结构及相关功能的实现(41)    
protected void Page_Load(object sender, EventArgs e)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)    
{
.net之旅-树型结构及相关功能的实现(41)        
// 获取Session中的用户ID
.net之旅-树型结构及相关功能的实现(41)
        String userId = Convert.ToString(Session["userId"]);
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)        LabelUserId.Text 
= userId;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)        
// 初始化功能树
.net之旅-树型结构及相关功能的实现(41)
        InitFuncTree();
.net之旅-树型结构及相关功能的实现(41)        AllOverTree(TreeViewFuncList.Nodes);
.net之旅-树型结构及相关功能的实现(41)    }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)    
private void InitFuncTree()
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)    

.net之旅-树型结构及相关功能的实现(41)        
.net之旅-树型结构及相关功能的实现(41)        SqlConnection conn 
= DbConn.GetConn();
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)        SqlDataAdapter adp 
= new SqlDataAdapter("select * from sysFunction", conn);
.net之旅-树型结构及相关功能的实现(41)        DataSet ds 
= new DataSet();
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)        
try
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            adp.Fill(ds);
.net之旅-树型结构及相关功能的实现(41)        }

.net之旅-树型结构及相关功能的实现(41)        
catch (Exception ex)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            ex.ToString();
.net之旅-树型结构及相关功能的实现(41)        }

.net之旅-树型结构及相关功能的实现(41)        
finally
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)                conn.Close();
.net之旅-树型结构及相关功能的实现(41)        }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)        
this.ViewState["ds"= ds;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)        AddTree(
0, (TreeNode)null);
.net之旅-树型结构及相关功能的实现(41)    }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)    
//递归添加树的节点
.net之旅-树型结构及相关功能的实现(41)
    private void AddTree(int ParentFunctionId, TreeNode pNode)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)    
{
.net之旅-树型结构及相关功能的实现(41)        DataSet ds 
= (DataSet)this.ViewState["ds"];
.net之旅-树型结构及相关功能的实现(41)        DataView dvTree 
= new DataView(ds.Tables[0]);
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)        
//过滤ParentFunctionId,得到当前的所有子节点
.net之旅-树型结构及相关功能的实现(41)
        dvTree.RowFilter = "[ParentFunctionId] = " + ParentFunctionId;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)        
foreach (DataRowView Row in dvTree)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            TreeNode Node 
= new TreeNode();
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)            
//添加根节点
.net之旅-树型结构及相关功能的实现(41)
            if (pNode == null)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)            
{   
.net之旅-树型结构及相关功能的实现(41)                Node.Text 
= Row["FunctionName"].ToString();
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)                TreeViewFuncList.Nodes.Add(Node);
.net之旅-树型结构及相关功能的实现(41)                Node.Expanded 
= true;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)                
//从根节点开始递归
.net之旅-树型结构及相关功能的实现(41)
                AddTree(Int32.Parse(Row["FunctionId"].ToString()), Node);    
.net之旅-树型结构及相关功能的实现(41)            }

.net之旅-树型结构及相关功能的实现(41)            
else
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)            
{   
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)                
//̀添加当前节点的子节点
.net之旅-树型结构及相关功能的实现(41)
                Node.Text = Row["FunctionName"].ToString();
.net之旅-树型结构及相关功能的实现(41)                
.net之旅-树型结构及相关功能的实现(41)                pNode.ChildNodes.Add(Node);
.net之旅-树型结构及相关功能的实现(41)                Node.Expanded 
= true;
.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)                
//再次递归
.net之旅-树型结构及相关功能的实现(41)
                AddTree(Int32.Parse(Row["FunctionId"].ToString()), Node);     
.net之旅-树型结构及相关功能的实现(41)             }

.net之旅-树型结构及相关功能的实现(41)        }

.net之旅-树型结构及相关功能的实现(41)    }
 
.net之旅-树型结构及相关功能的实现(41)   
.net之旅-树型结构及相关功能的实现(41)    
protected  void  AllOverTree(TreeNodeCollection tnc)   
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)    
{   
.net之旅-树型结构及相关功能的实现(41)        
foreach(TreeNode node in tnc)   
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            
if (node.ChildNodes.Count != 0)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)            
{
.net之旅-树型结构及相关功能的实现(41)                AllOverTree(node.ChildNodes);
.net之旅-树型结构及相关功能的实现(41)            }

.net之旅-树型结构及相关功能的实现(41)            
else
.net之旅-树型结构及相关功能的实现(41)            
//在叶子节点设置其NavigateUrl   
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)
            {
.net之旅-树型结构及相关功能的实现(41)                setNavigateUrl(node);
.net之旅-树型结构及相关功能的实现(41)                
//node.NavigateUrl = "~/InterFace/FunctionChoose.aspx?" + node.Text;
.net之旅-树型结构及相关功能的实现(41)
            }

.net之旅-树型结构及相关功能的实现(41)        }
   
.net之旅-树型结构及相关功能的实现(41)    }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)    
private void setNavigateUrl(TreeNode node)
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)    
{
.net之旅-树型结构及相关功能的实现(41)        
if (node.Text.Equals("新闻"))
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            node.NavigateUrl 
= "~/InterFace/News.aspx";
.net之旅-树型结构及相关功能的实现(41)        }

.net之旅-树型结构及相关功能的实现(41)        
if (node.Text.Equals("通知"))
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            node.NavigateUrl 
= "~/InterFace/Notice.aspx";
.net之旅-树型结构及相关功能的实现(41)        }

.net之旅-树型结构及相关功能的实现(41)        
else
.net之旅-树型结构及相关功能的实现(41).net之旅-树型结构及相关功能的实现(41)        
{
.net之旅-树型结构及相关功能的实现(41)            node.NavigateUrl 
= "~/InterFace/Others.aspx";
.net之旅-树型结构及相关功能的实现(41)        }

.net之旅-树型结构及相关功能的实现(41)    }

.net之旅-树型结构及相关功能的实现(41)
.net之旅-树型结构及相关功能的实现(41)}

.net之旅-树型结构及相关功能的实现(41)

测试通过:

           本来打算贴图的可是传不上。遗憾!代码中有些是Session的内容是用来做权限控制的,这里用不到。

网页显示如下:

 

.net之旅-树型结构及相关功能的实现(41) 系统功能
.net之旅-树型结构及相关功能的实现(41) 信息中心
.net之旅-树型结构及相关功能的实现(41) .net之旅-树型结构及相关功能的实现(41) 新闻
.net之旅-树型结构及相关功能的实现(41) .net之旅-树型结构及相关功能的实现(41) 通知
.net之旅-树型结构及相关功能的实现(41) .net之旅-树型结构及相关功能的实现(41) 公告
.net之旅-树型结构及相关功能的实现(41) 项目中心
.net之旅-树型结构及相关功能的实现(41) .net之旅-树型结构及相关功能的实现(41) 申报
.net之旅-树型结构及相关功能的实现(41) .net之旅-树型结构及相关功能的实现(41) 审批
.net之旅-树型结构及相关功能的实现(41) .net之旅-树型结构及相关功能的实现(41) 过程
.net之旅-树型结构及相关功能的实现(41) .net之旅-树型结构及相关功能的实现(41) 结题
.net之旅-树型结构及相关功能的实现(41) 产品中心
.net之旅-树型结构及相关功能的实现(41) 在研产品