.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控件地址
安装后,通过“自定义工具箱”->“.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">
              <FONTFONT-SIZE: 9pt;">宋体">
                   <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
{
       /// <summary>
       /// WebForm1 的摘要说明
       /// </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);
              }
             
              /// <summary>
              ///设计器支持所需的方法 - 不要使用代码编辑器修改
              /// 此方法的内容
              /// </summary>
              private void InitializeComponent()
              {   
                     this.Load += new System.EventHandler(this.Page_Load);
 
              }
              #endregion
       }
}
 
后记:请读者自行修改程序中的连接字符串设置。
 
声明:本文版权与解释权归李洪根所有,如需转载,请保留完整的内容及此声明。
QQ: 21177563  
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言. 第1章 Windows窗体技术 案例1.1 多文档MDI应用程序 案例1.2 QQ窗体 案例1.3 卡通窗体, 案例1.4 带有分隔栏并更换主界面背景窗体 案例1.5 半透明渐显动画和渐变窗体 案例1.6 浮动的窗体 案例1.7 在屏幕中央并总在最前窗体 案例1.8 椭圆形窗体 案例1.9 可移动的五边形窗体 案例1.10 文字窗体 案例1.11 动态滑入滑出的闪烁窗体 案例1.12 以树形显示的窗体 案例1.13 图案动画窗体 本章小结 第2章 图形图像处理技术 案例2.1 波形图特效 案例2.2 在图像中写入文字 案例2.3 图像缩放与翻转 .案例2.4 图像的涂沫 案例2.5 百叶窗图像效果 案例2.6 图像的纹理和遮罩动画效果 案例2.7 图像的积木和浮雕效果 案例2.8 文字的360°旋转效果 案例2.9 可以随意移动的GIF动画 案例2.10 图像的属性及选择点的RGB颜色值 案例2.11 运行的时钟 本章小结 第3章 多媒体处理技术 案例3.1 MP3播放器 案例3.2 Flash播放器 案例3.3 Gif播放器 案例3.4 图像滚动展示动画效果 案例3.5 电子相册 案例3.6 交通信号灯 案例3.7 随机变换图像屏幕保护程序 案例3.8 MP3音乐屏幕保护程序 本章小结 第4章 数据库处理技术 案例4.1 利用控件连接Access数据库 案例4.2 利用代码连接加密Access数据库 案例4.3 读取并浏览Access数据库中的数据 案例4.4 利用控件连接SQL Server数据库 案例4.5 利用ADO.NET访问SQL Server数据库 案例4.6 连接Excel电子表格 案例4.7 利用SQL语句向数据库表中插入数据 案例4.8 利用存储过程修改数据库中的数据 案例4.9 分页显示数据库表中的数据 案例4.10 动态查询数据库表中的数据 案例4.11 SQL Server服务的开启和断开 本章小结 第5章 水晶报表和打印处理技术 案例5.1 水晶报表中使用SQL Server数据库 案例5.2 利用水晶报表分组统计数据库中的数据 案例5.3 图表在水晶报表中的应用 案例5.4 控制水晶报表的字段个数、字体颜色及记录显示 案例5.5 水晶报表中子报表的应用 案例5.6 利用打印组件实现窗体数据的打印 案例5.7 打印输出图形图像 案例5.8 调用Excel打印表格数据 案例5.9 调用Word打印表格数据 本章小结 第6章 文件及注册表处理技术 案例6.1 文件的动态创建与删除 案例6.2 文件夹的动态创建与删除.. 案例6.3 文件的打开和保存 案例6.4 文件的加密和解密 案例6.5 文件的动态查找 案例6.6 动态复制多个文件 案例6.7 动态获取系统当前目录及程序当前目录 案例6.8 文件属性的查看与修改 案例6.9 桌面图标和驱动器的显示与隐藏 案例6.10 禁示修改IE浏览器的主页 本章小结 第7章 硬件处理技术 案例7.1 计算机的注销、关闭和重新启动 案例7.2 任务栏和“开始”按钮的显示与隐藏 案例7.3 声卡的检测及PC喇叭的控制 案例7.4 动态控制光驱的打开和关闭 案例7.5 鼠标的控制 案例7.6 设置系统默认输入法 案例7.7 锁定计算机 案例7.8 屏幕保护程序的启动 案例7.9 利用串口进行通信 本章小结 第8章 数据结构与算法 案例8.1 单向链表数据结构 案例8.2 堆栈数据结构 案例8.3 队列数据结构 案例8.4 冒泡排序和选择排序 案例8.5 希尔排序和插入排序 案例8.6 搬砖问题算法 案例8.7 爱因斯坦的阶梯问题算法 案例8.8 求最大公因子的欧几里德算法 案例8.9 IP地址的合法性检查算法 案例8.10 由旧身份证自动生成新身证算法 本章小结 第9章 网络开发技术 案例9.1 动态获取本机名和IP地址 案例9.2 动态获取本机网卡地址 案例9.3 动态修改本机IP地址 案例9.4 网络连接和传输信息 案例9.5 网络在线检测 案例9.6 网络在线浏览器 案例9.7 HTTP动态下载 案例9.8 动态查看网页标题信息 案例9.9 电子邮件的发送 本章小结 第10章 Web程序开发技术 案例10.1 利用AdRotator控件随机显示广告图像 案例10.2 利用Calendar控件动态查询系统日期 案例10.3 会员登录系统 案例10.4 利用Application对象实现网站计数器 案例10.5 利用Session对象实现留言板 案例10.6 动态上传图像并显示 案例10.7 利用控件显示数据库表中的数据 案例10.8 分页显示数据库表中的数据 案例10.9 动态选择、编辑、删除数据库表中的数据 本章小结 第11章 应用程序的打包 案例11.1 Windows应用程序的打包 案例11.2 Web应用程序的打包 案例11.3 带有数据库文件的应用程序的打包 案例11.4 带有特定文件的应用程序打包 案例11.5 带有注册表信息的应用程序打包 本章小结 第12章 消费管理系统 12.1 系统总体设计 12.2 系统数据库设计 12.3 实例效果 12.4 消费管理登录系统 12.5 消费管理系统主界面 12.6 消费管理系统的查询功能 12.7 消费信息管理功能 12.8 消费信息报表输出界面 本章小结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值