欢迎光临
我们一直在努力

.NET平台下Web树形结构程序设计-.NET教程,VB.Net语言

建站超值云服务器,限时71元/月

我的上篇文章《树形结构在开发中的应用》主要是在windows form下的实现,下面讲一下web form下的实现。

概述

treeview是一个重要的控件,无论是在vb.net,c# 还是vb、delphi等各种语言中,都充当了导航器的作用。在实际工作中,很多情况下需要将treeview与数据库进行连接,以填充其节点。在windows form和web form中,我们可以用treeview来显示树形结构,如显示目录树、显示地区、分类显示商品等。可以说,在大部分软件的开发中,treeview都是一个不可缺少的展示控件。因此,树形结构的设计就成了软件开发人员一个永恒的话题。

树形结构的展示方式

树形结构的展示一般来讲有三种方式:

1.界面设计时在treeview设计器或者代码中直接填充treeview控件。

2.从xml文件中建立树形结构。

3.从数据库中得到数据,建立树形结构。

第一种方式是最简单的,这种方式主要用于树形结构一般没有变化的应用程序,在设计时就固定一颗树。当然,在设计时固定了树的结构,以后要想修改、增加、删除树的节点,就必须修改源程序。所有不利于扩展。

第二种方式从xml文件中提取,由于xml本身就是树形结构的,微软提供的文档对象模型dom 可以方便的读取、操作和修改 xml 文档。在.net中,应用system.xml类可以方便地将xml文件加载到treeview控件中,微软的msdn也提供了实例,此处就不再多说。

第三种方式,树形结构的数据,从数据库中获得。一般来讲,我们的应用程序多数是基于数据库的。采用这种方式,增加、修改、删除一颗树的节点很方便,只要操作数据库中的数据就可以了。而且,这种方式可以和数据库中的其它表做关联、查询和汇总,通过设计视图或存储过程,很容易查询出你想要的相关数据。下面,我们主要讨论这种方式的设计和实现。

数据库设计

首先,我们在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,北京,11)

insert tbtree (id,context,parentid) values ( 3,天津,11)

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

下载地址

http://msdn.microsoft.com/downloads/samples/internet/asp_dot_net_servercontrols/webcontrols/default.asp

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

新建一个项目,选择visual basic.net 工程asp.net web应用程序,在页面上拖画一个treeview控件。

html页:

<%@ register tagprefix="iewc" namespace="microsoft.web.ui.webcontrols" assembly="microsoft.web.ui.webcontrols, version=1.0.2.226, culture=neutral, publickeytoken=31bf3856ad364e35" %>

<%@ page language="vb" autoeventwireup="false" codebehind="webform1.aspx.vb" inherits="tree.webform1"%>

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

<html>

<head>

<title>webform1</title>

<meta name="generator" content="microsoft visual studio .net 7.0">

<meta name="code_language" content="visual basic 7.0">

<meta name="vs_defaultclientscript" content="javascript">

<meta name="vs_targetschema" content="http://schemas.microsoft.com/intellisense/ie5">

</head>

<body ms_positioning="gridlayout">

<form id="form1" method="post" runat="server">

<font face="宋体">

<iewc:treeview id="treeview1" style="z-index: 101; left: 39px; top: 68px" runat="server"></iewc:treeview></font>

</form>

</body>

</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

{

///

/// webform1 的摘要说明

///

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);

}

/// <summary>

///设计器支持所需的方法 – 不要使用代码编辑器修改

/// 此方法的内容

/// </summary>

private void initializecomponent()

{

this.load += new system.eventhandler(this.page_load);

}

#endregion

}

}

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

附:相关微软msdn文档,包括在vb6和.net中从xml建立树形结构

http://support.microsoft.com/default.aspx?kbid=311318

http://support.microsoft.com/default.aspx?kbid=308063

http://support.microsoft.com/default.aspx?kbid=317597

http://support.microsoft.com/default.aspx?kbid=244954

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » .NET平台下Web树形结构程序设计-.NET教程,VB.Net语言
分享到: 更多 (0)

相关推荐

  • 暂无文章