.NET平台下Web树形结构程序设计

.NET平台下Web树形结构程序设计

我的上篇文章《树形结构在开发中的应用》主要是在Windows Form下的实现,下面是Web Form下的实现。

数据库设计

首先,我们在 SQL SERVER 2000 里建立一个表 tbTree ,表的结构设计如下:

列名

|

数据类型

|

描述

|

长度

|

主键

---|---|---|---|---

ID

|

Int

|

节点编号

|

4

|

ParentID

|

Int

|

父节点编号

|

4

|

ConText

|

Nvarchar

|

我们要显示的节点内容

|

50

|

在 SQL SERVER 2000 中建表的脚本:

CREATE TABLE [dbo].[tbTree] (

[ID] [int] IDENTITY (1, 1) NOT NULL ,

[Context] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

[ParentID] [int] NULL

) ON [PRIMARY]

在表中添加如下记录:

SET IDENTITY_INSERT tbtree ON

insert tbtree (ID,Context,ParentID) values ( 1,' 中国 ',0)

insert tbtree (ID,Context,ParentID) values ( 2,' 北京 ',1)

insert tbtree (ID,Context,ParentID) values ( 3,' 天津 ',1)

insert tbtree (ID,Context,ParentID) values ( 4,' 河北省 ',1)

insert tbtree (ID,Context,ParentID) values ( 5,' 广东省 ',1)

insert tbtree (ID,Context,ParentID) values ( 6,' 广州 ',5)

insert tbtree (ID,Context,ParentID) values ( 7,' 四川省 ',1)

insert tbtree (ID,Context,ParentID) values ( 8,' 成都 ',7)

insert tbtree (ID,Context,ParentID) values ( 9,' 深圳 ',5)

insert tbtree (ID,Context,ParentID) values ( 10,' 石家庄 ',4)

insert tbtree (ID,Context,ParentID) values ( 11,' 辽宁省 ',1)

insert tbtree (ID,Context,ParentID) values ( 12,' 大连 ',11)

insert tbtree (ID,Context,ParentID) values ( 13,' 上海 ',1)

insert tbtree (ID,Context,ParentID) values ( 14,' 天河软件园 ',6)

insert tbtree (ID,Context,ParentID) values ( 15,' 汕头 ',5)

SET IDENTITY_INSERT tbtree off

下载Treeview控件地址

http://msdn.microsoft.com/downloads/samples/internet/ASP_DOT_NET_ServerControls/WebControls/default.asp

安装后,通过 “ 自定义工具箱 ”->“.net 框架组件 ” 把 TreeView 添加到工具箱里。

新建一个项目,选择 Visual Basic.Net 工程 Asp.net Web 应用程序,在页面上拖画一个 TreeView 控件。

Html 页:

1@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=  1.0.2  .226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
1@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="Tree.WebForm1"
 1<html>
 2<head>
 3<title>WebForm1</title>
 4<meta content="Microsoft Visual Studio .NET 7.0" name="GENERATOR"/>
 5<meta content="Visual Basic 7.0" name="CODE_LANGUAGE"/>
 6<meta content="JavaScript" name="vs_defaultClientScript"/>
 7<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"/>
 8</head>
 9<body ms_positioning="GridLayout">
10<form id="Form1" method="post" runat="server">
11<font face="  宋体  ">
12<iewc:treeview id="TreeView1" runat="server" style="Z-INDEX: 101; LEFT: 39px; TOP: 68px"></iewc:treeview></font>
13</form>
14</body>
15</html>

后台代码:

Private Sub Page_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase .Load

Dim ds As New DataSet()

Dim CN As New SqlConnection()

Try

' 初始化连接字符串

CN.ConnectionString = "data source=pmserver;initial catalog=Benchmark;persist security info=False;user id=sa;Password=sa;"

CN.Open()

Dim adp As SqlDataAdapter = New SqlDataAdapter( "select * from tbTree" , CN)

adp.Fill(ds)

Me .ViewState( "ds" ) = ds

Catch ex As Exception

If DEBUG Then

Session( "Error" ) = ex.ToString()

Response.Redirect( "error.aspx" ) '̀ 跳转程序的公共错误处理页面

End If

Finally

' 关闭连接

CN.Close()

End Try

' 调用递归函数,完成树形结构的生成

AddTree( 0 , Nothing )

End Sub

' 递归添加树的节点

Private Sub AddTree( ByVal ParentID As Integer , ByVal pNode As TreeNode)

Dim ds As DataSet

ds = Me .ViewState( "ds" )

Dim dvTree As New DataView()

dvTree = New DataView(ds.Tables( 0 ))

' 过滤 ParentID, 得到当前的所有子节点

dvTree.RowFilter = "PARENTID = " + ParentID.ToString

Dim Row As DataRowView

For Each Row In dvTree

Dim Node As New TreeNode()

If pNode Is Nothing Then ' 判断是否根节点

' 添加根节点

Node.Text = Row( "ConText" ).ToString()

TreeView1.Nodes.Add(Node)

Node.Expanded = True

' 再次递归

AddTree(Int32.Parse(Row( "ID" ).ToString()), Node)

Else

'̀ 添加当前节点的子节点

Node.Text = Row( "ConText" ).ToString()

pNode.Nodes.Add(Node)

Node.Expanded = True

' 再次递归

AddTree(Int32.Parse(Row( "ID" ).ToString()), Node)

End If

Next

End Sub

C#版本:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using Microsoft.Web.UI.WebControls;

using System.Data.SqlClient;

namespace TreeCS

{

///

1<summary>
2
3/// WebForm1 的摘要说明 
4
5/// </summary>

public class WebForm1 : System.Web.UI.Page

{

protected Microsoft.Web.UI.WebControls.TreeView TreeView1;

private void Page_Load(object sender, System.EventArgs e)

{

// 定义数据库连接

SqlConnection CN = new SqlConnection();

try

{

//初始化连接字符串

CN.ConnectionString= "data source=pmserver;initial catalog=Benchmark;persist security info=False;user id=sa;Password=sa;";

CN.Open();

SqlDataAdapter adp = new SqlDataAdapter("select * from tbTree",CN);

DataSet ds=new DataSet();

adp.Fill(ds);

this.ViewState["ds"]=ds;

}

catch (Exception ex)

{

Session["Error"] = ex.ToString();

Response.Redirect("error.aspx"); //̀跳转程序的公共错误处理页面

}

finally

{

CN.Close();

}

//调用递归函数,完成树形结构的生成

AddTree(0, (TreeNode)null);

}

//递归添加树的节点

public void AddTree(int ParentID,TreeNode pNode)

{

DataSet ds=(DataSet) this.ViewState["ds"];

DataView dvTree = new DataView(ds.Tables[0]);

//过滤ParentID,得到当前的所有子节点

dvTree.RowFilter = "[PARENTID] = " + ParentID;

foreach(DataRowView Row in dvTree)

{

TreeNode Node=new TreeNode() ;

if(pNode == null)

{ //添加根节点

Node.Text = Row["ConText"].ToString();

TreeView1.Nodes.Add(Node);

Node.Expanded=true;

AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归

}

else

{ //̀添加当前节点的子节点

Node.Text = Row["ConText"].ToString();

pNode.Nodes.Add(Node);

Node.Expanded = true;

AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归

}

}

}

#region Web Form Designer generated code

override protected void OnInit(EventArgs e)

{

//

// CODEGEN该调用是 ASP.NET Web 窗体设计器所必需的。

//

InitializeComponent();

base.OnInit(e);

}

///

1<summary>
2
3///设计器支持所需的方法 - 不要使用代码编辑器修改 
4
5/// 此方法的内容 
6
7/// </summary>

private void InitializeComponent()

{

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

}

}

后记:请读者自行修改程序中的连接字符串设置。

声明:本文版权与解释权归李洪根所有,如需转载,请保留完整的内容及此声明。

QQ: 21177563

MSN: [email protected]

专栏: http://www.csdn.net/develop/author/netauthor/lihonggen0/

Published At
Categories with Web编程
Tagged with
comments powered by Disqus