APP下载

浅析树形控件在ASP.NET中的使用

2009-08-25刘雄军宁云智

消费导刊 2009年14期
关键词:控件

刘雄军 宁云智

[摘 要]在上网时经常会看到一些网站在左边采用类似资源管理器的树形结构,单击树形结构中的分支,相应的内容将在右边显示,层次清晰且方便快捷,本文主要介绍TreeView控件在ASP.NET中的应用,旨在对想在网站上使用树形结构的读者提供帮助。

[关键词]TreeView 数据库连接 数据绑定 树形控件 控件

一、概述

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

二、在Visual Studio .NET 2003中添加树形控件

(一)安装TreeView控件。从网上下载IEWebControls文件,并安装,注意其安装目录的位置。

(二)更改“build.bat”文件的属性。打开其安装目录,右击“bulid.bat”文件,选择“属性”,打开“build.bat属性”对话框,取消“只读”属性。

(三)查找“csc.exe”文件的路径。“csc.exe”为系统文件,默认的路径为“C:WINDOWSMicrosoft.NETFrameworkv1. 1.4322”。

(四)修改“build.bat”文件。右击“bulid.bat”文件,选择“编辑”,打开“build.bat”文件,如图1如所。csc.exe的路径与上一步查询得到的路径是否相同,若不相同则改之,修改之后保存文件。

(五)执行“build.bat”文件。双击“build.bat”文件,安装目录将生成一个“build”文件夹,此文件夹下的文件就是我们使用树形控件时要用到的文件。

(六)复制文件到ASP.NET主目录下。将“C:Program FilesIE Web Controls uild”下“runtime”文件夹下所有内容复制到主目录“webctrl_client1_0”下,如果主目录下没有“webctrl_client 1_0”文件夹,则创建此路径的文件夹。

(七)复制“Microsoft.Web.UI.Web Controls.dll”文件。将“C:Program FilesI E Web Controlsuild”下“Microsoft.Web. UI.WebControls.dll”文件复制到主目录。

(八)将树形控件添加到工具箱。打开Microsoft Visual Studio .NET,右击工具箱,选择“添加/移除项…”,打开“自定义工具箱”,单击“浏览”按钮,选择“Microsoft.Web.UI.WebControls.dll”文件,单击“确定”,TreeView控件将添加到工具箱中。

三、树形控件在ASP.NET中的应用

TreeView控件中的数据来源有三种方式:界面设计时在TreeView设计器或者代码中直接填充TreeView控件、从XML文件中建立树形结构和从数据库中得到数据,建立树形结构。前两种相对来说较简单,这里就不介绍了,这里重点介绍从数据库中得到数据。

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

(一)数据库设计

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

关于Depth(深度)字段,主要是存放节点的层数,也就是说这个节点在树中的哪个层。有Depth(深度)字段,我们编程时会比较方便,在SQL查询时只有加一个where条件就可以查询出当前深度的层的所有节点。如果我们不设计Depth(深度)字段,同样可以做类似的查询,这就需要在后台的SQL 查询中用循环处理。或者,你可以不在后台数据库服务器端处理,把这些处理放在前台。

建数据表的脚本如下:

CREATE TABLE [dbo].[Tree_Tb] ( [ID] [int] NOT NULL , [Context] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,[ParentID] [int] NULL ,[depth] [int] NULL ) ON [PRIMARY]

在表中添加数据,如下代码所示:

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

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

insert Tree_Tb (ID,Context,ParentID,depth)values ( 3,'湖南省',1,1)

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

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

insert Tree_Tb (ID,Context,ParentID,depth)values ( 6,'广州',5,2)

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

insert Tree_Tb (ID,Context,ParentID,depth)values ( 8,'成都',7,2)

insert Tree_Tb (ID,Context,ParentID,depth)values ( 9,'长沙',3,2)

insert Tree_Tb (ID,Context,ParentID,depth)values ( 10,'石家庄',4,2)

insert Tree_Tb (ID,Context,ParentID,depth)values ( 11,'株洲',3,2)

insert Tree_Tb (ID,Context,ParentID,depth)values ( 12,'湘潭',3,2)

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

数据内容如图2所示。

(二)在ASP.NET中的实现

在ASP.NET中实现将数据库数据绑定到树形控件的思路是:从数据库中查询到所有节点的记录,添加到DataView中,利用DataView的.RowFilter属性得到某个父节点编号ParentID下的所有记录,依次递归循环。程序代码如下。

Private ds As New DataSet ()

' AddTree递归函数每次都要用到数据集中的一个表,所以定义成private

Private Sub Form1_Load

(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles MyBase.Load

' '定义数据库连接

Dim CN As New SqlConnection()

Try

'初始化连接字符串

CN.ConnectionString = “server=.;database=pubs; user id=sa;Password=sa;” CN.Open()

'添加命令,从数据库中得到数据

Dim sqlCmd As New SqlCommand()

sqlCmd.Connection = CN

sqlCmd.CommandText = "select * from Tree_Tb"

sqlCmd.CommandType = CommandType.Text

Dim adp As SqlDataAdapter = New SqlDataAdapter(sqlCmd)

adp.Fill(ds)

Catch ex As Exception

MsgBox(ex.Message)

Finally

'关闭连接

CN.Close()

End Try

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

AddTree(0, Nothing)

End Sub

'递归添加树的节点

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

Dim Node As TreeNode

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

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

'添加根节点

Node = TreeView1.Nodes.Add(Row("context").ToString())

'再次递归

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

‘添加当前节点的子节点

Node = pNode.Nodes.Add(Row("context").ToString())

'再次递归

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

End If

Node.EnsureVisible()

Next

End Sub

执行上面的程序就可以看到将数据库的数据绑定到了树形控件。

四、结束语

TreeView是一个重要的导航控件,希望本文的介绍能对想在网站上使用树形结构的读者有所帮助。

参考文献

[1]Microsoft Visual Studio 。NET 2003文档

[2]MSDN Library Visual Studio。NET

[3]黄志超,李婷婷Visual Basic。NET项目开发实践

[4]杨帆,赵义霞。ASP.NET技术与应用

[5]Sanjew Rohilla,Senthil NathanADO.NET专业项目实例开发。陈君,王宝良译,中国水利水电出版社,2003

猜你喜欢

控件
使用“填表单”微信小程序 统计信息很方便
一种用户程序的自动布局算法
基于.net的用户定义验证控件的应用分析
关于.net控件数组的探讨
Excel深度考核自动阅卷系统中控件的评判方法
ASP.NET服务器端验证控件的使用
基于JARI_EGK图形开发系统在声呐多功能显控台中的应用
用VB扩展Authorware数据库应用能力的方法
基于VxWorks的人机界面图形开发系统设计
基于多级链表实现MiniGUI属性页控件设计