树的展现方式

原创 2004年07月28日 09:35:00

树的展现方式有很多种,我们最常用的就是递归了,但这是我要向大家介绍的是一种比较好的树展现方式:请看下面.

CREATE TABLE [dbo].[t_flow_treeview] (

 

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

 

       [f_node_code] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,

 

       [f_node_name] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,

 

       [f_parentnode_code] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,

 

       [f_parentnode_name] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,

 

       [f_recommendinfo_NUM] [int] NULL ,

 

       [f_link_url] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL

 

) ON [PRIMARY]

 

实际数据如下:(部分与构造树无关的字段略掉)

 

 

 




 

f_flowtreeview_ID

 

f_node_code

 

f_node_name

 

f_parentnode_code

 



 

 

 

97   

 

001001

 

首页

 

0

 

10 

 

 

98   

 

001001.002001

 

行业新闻

 

001001

 

10 

 

 

99   

 

001001.002002

 

招标公告

 

001001

 

9  

 

 

100 

 

001001.002003

 

政务信息

 

001001

 

20 

 

 

101 

 

001001.002004

 

项目信息

 

001001

 

10 

 

 

102 

 

001001.002005

 

中标结果

 

001001

 

10 

 

 

103 

 

001001.002006

 

资质公告

 

001001

 

10 

 

 

104 

 

001001.002007

 

政策文件

 

001001

 

12 

 

 

105 

 

001001.002008

 

行业信息

 

001001

 

10 

 

 

106 

 

001002

 

新闻

 

0

 

10 

 

 

107 

 

001002.002001

 

推荐信息

 

001002

 

20 

 

 

108 

 

001002.002002

 

精彩专题

 

001002

 

20 

 

 

109 

 

001002.002003

 

每日聚焦

 

001002

 

10 

 

 

110 

 

001003

 

政务信息

 

0

 

10 

 

 

111 

 

001003.002001

 

政策文件

 

001003

 

100      

 

 

112 

 

001003.002002

 

热点关注

 

001003

 

100      

 

 

113 

 

001004

 

项目信息

 

0

 

10 

 

 

114 

 

001004.002001

 

综合信息

 

001004

 

14 

 

 

115 

 

001004.002002

 

物资信息

 

001004

 

14 

 

 

116       

 

001005   

 

建设物质

 

0

 

10 

 

大家可以自己分析一下上面各数据之间的关系,f_parentnode_code0的表示这是树里面的一个父节点,否则f_parentnode_code为他的父节点的ID,我们看“首页”那一条的f_node_code001001,“行业新闻”是他的子 第二层子节点的第一个节点,那么“行业新闻”的f_node_code001001.002001  ,前6位表示父节点的ID,后6位表示第二层的第一个节点,类推,第二层第3个是 001001.002003,第三层第一个子节点是001001.003001,我想大概你已经理解了

*********************************************************

代码

*********************************************************

using System;

 

using Microsoft.Web.UI.WebControls;

 

namespace CreateTree

 

{

 

       ///

 

       /// Class1 的摘要说明。

 

       ///

 

       public class Tree

 

       {

 

              protected string _NodeCodeColumnName;//节点代码在数据表中的列名

 

              protected string _NodeNameColumnName;//节点名在数据表中的列名

 

              protected string _ParentCodeColumnName;//节点的父节点id在表数据表中的列名

 

              protected System.Collections.Hashtable _hashTable;//

 

              protected string _TableName;//构成树的表名

 

              protected System.Data.DataSet dataSet;//构成树的数据集合

 

              protected System.Data.SqlClient.SqlConnection sqlConnection;

 

              protected System.Data.SqlClient.SqlCommand sqlCommand;

 

              protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter;

 

              protected string _sqlConnectionString;//数据库连接字符串

 

              public Tree()

 

              {

 

                     //

 

                     // TODO: 在此处添加构造函数逻辑

 

                     //

 

                     this._hashTable=new System.Collections.Hashtable();

 

                     this.dataSet=new System.Data.DataSet();

 

                     this.sqlCommand=new System.Data.SqlClient.SqlCommand ();

 

                     this.sqlConnection=new System.Data.SqlClient.SqlConnection();

 

                     this.sqlDataAdapter=new System.Data.SqlClient.SqlDataAdapter();

 

                     this.sqlDataAdapter.SelectCommand=this.sqlCommand;

 

                     this.sqlCommand.Connection=this.sqlConnection;

 

              }

 

              public string sqlConnectionString

 

              {

 

                     get

 

                     {

 

                            return this._sqlConnectionString;

 

                     }

 

                     set

 

                     {

 

                            this._sqlConnectionString=value;

 

                     }

 

              }

 

              ///

 

              /// 得到或设置节点代码在数据表中的列名

 

              ///

 

              public string NodeCodeColumnName

 

              {

 

                     get

 

                     {

 

                            return this._NodeCodeColumnName ;

 

                     }

 

                     set

 

                     {

 

                            this._NodeCodeColumnName=value;

 

                     }

 

              }

 

              ///

 

              /// 得到或设置构成树的这张表的表名

 

              ///

 

              public string TableName

 

              {

 

                     get

 

                     {

 

                            return this._TableName;

 

                     }

 

                     set

 

                     {

 

                            this._TableName=value;

 

                     }

 

              }

 

              ///

 

              /// 得到或设置节点名在数据表中的列名

 

              ///

 

              public string NodeNameColumnName

 

              {

 

                     get

 

                     {

 

                            return this._NodeNameColumnName;

 

                     }

 

                     set

 

                     {

 

                            this._NodeNameColumnName=value;

 

                     }

 

              }

 

              ///

 

              /// 得到或设置节点的父节点代码在数据表中的列名

 

              ///

 

              public string ParentCodeColumnName

 

              {

 

                     get

 

                     {

 

                            return this._ParentCodeColumnName;

 

                     }

 

                     set

 

                     {

 

                            this._ParentCodeColumnName=value;

 

                     }

 

              }

 

              ///

 

              /// 打开数据库

 

              ///

 

              private void OpenDB()

 

              {

 

                     if(this.sqlConnection.State==System.Data.ConnectionState.Closed)

 

                     {

 

                            this.sqlConnection.ConnectionString=this.sqlConnectionString;

 

                            this.sqlConnection.Open();

 

                     }

 

              }

 

              ///

 

              /// 关闭数据库

 

              ///

 

              private void CloseDB()

 

              {

 

                     if(this.sqlConnection.State==System.Data.ConnectionState.Open)

 

                     {

 

                            this.sqlConnection.Close();

 

                     }

 

              }

 

              ///

 

              /// 构造DataSet 

 

              ///

 

              protected void CreateDataSet()

 

              {

 

                     string strSql="SELECT "+this.NodeCodeColumnName+", "+this.NodeNameColumnName+", "+this.ParentCodeColumnName+" FROM "+this.TableName+" "+

 

"ORDER BY "+this.NodeCodeColumnName;

 

                     this.sqlCommand.CommandType=System.Data.CommandType.Text;

 

                     this.sqlCommand.CommandText=strSql;

 

                     this.OpenDB();

 

              this.sqlDataAdapter.Fill(this.dataSet);

 

                     this.CloseDB();

 

              }

 

 

 

              ///

1`

 

              /// 构造出树

 

              ///

 

              /// TreeView 控件

 

 

 

              public void CreateTree(Microsoft.Web.UI.WebControls.TreeView tree)

 

              {

 

             

 

              CreateDataSet();//构造数据集合

 

                    

 

                     foreach(System.Data.DataRow dataRow in this.dataSet.Tables[0].Rows)

 

                     {

 

                           

 

                            TreeNode treeNode=new TreeNode();

 

                            treeNode.Text=dataRow[this.NodeNameColumnName].ToString();

 

                            treeNode.NodeData=dataRow[this.NodeCodeColumnName].ToString();

 

                            if(dataRow[this.ParentCodeColumnName].ToString().Equals("0"))

 

                            {

 

                                   tree.Nodes.Add(treeNode);

 

                            }

 

                            else

 

                            {

 

                                   TreeNode newTreeNode=((TreeNode)this._hashTable[dataRow[this.ParentCodeColumnName]]);

 

                                   if(newTreeNode!=null)

 

                                   newTreeNode.Nodes.Add(treeNode);

 

                           

 

                            }

 

                            this._hashTable.Add(dataRow[this.NodeCodeColumnName],treeNode);

 

                    

 

                           

 

                           

 

                     }

 

                     this._hashTable.Clear();

 

                    

 

                    

 

              }

 

              ///

 

              /// 得到树中选中

 

              ///

 

              /// 操作的树

 

              /// 参数数组

 

              /// 返回一个dataset

 

              public System.Data.DataSet GetData(Microsoft.Web.UI.WebControls.TreeView treeView,params string[] strArray)

 

              {

 

                     string nodedata=treeView.GetNodeFromIndex(treeView.SelectedNodeIndex).NodeData;

 

                     string strJoinArray=String.Join(",",strArray);

 

                     string strSql="SELECT "+strJoinArray+" FROM  "+this.TableName

 

                     +" WHERE ("+this.NodeCodeColumnName+" = '"+nodedata+"')";

 

                     this.sqlCommand.CommandType=System.Data.CommandType.Text;

 

                     this.sqlCommand.CommandText=strSql;

 

                     this.OpenDB();

 

                     this.sqlDataAdapter.Fill(this.dataSet);

 

                     this.CloseDB();

 

                     return this.dataSet;

 

 

 

              }

 

              ///

 

              /// 得到一个最后一个节点的数据

 

              ///

 

              /// 当前操作的树

 

              /// 一个DataRow

 

              public System.Data.DataRow  GetLastNodeData(Microsoft.Web.UI.WebControls.TreeView treeView,params string[] strArray)

 

              {

 

                     string nodedata=treeView.GetNodeFromIndex(treeView.SelectedNodeIndex).NodeData;

 

                     string strJoinArray=String.Join(",",strArray);

 

                     string strSql="SELECT "+strJoinArray+" FROM  "+this.TableName

 

                            +" WHERE ("+this.NodeCodeColumnName+" = '"+nodedata+"')";

 

                     string strCountSql="select count(*) from "+this.TableName+" where "+this.ParentCodeColumnName+"='"+nodedata+"'";

 

                     this.sqlCommand.CommandType=System.Data.CommandType.Text;

 

                     this.sqlCommand.CommandText=strCountSql;

 

                     this.OpenDB();

 

                     if(0==(int)this.sqlCommand.ExecuteScalar())

 

                     {

 

                            this.sqlCommand.CommandText=strSql;

 

                           

 

                            this.sqlDataAdapter.Fill(this.dataSet);

 

                            this.CloseDB();

 

                            return this.dataSet.Tables[0].Rows[0];

 

                     }

 

                     else

 

                     {

 

              return null;

 

                           

 

                           

 

                     }

 

              }

 

       }

 

}

 

 

 

用法:

 

CreateTree.Tree tree=new CreateTree.Tree();

 

                     tree.sqlConnectionString=@"data source=HANCHAOHANCHAO;initial catalog=pubs;persist security info=False;user id=sa;workstation id=HANCHAO;packet size=4096";

 

                     tree.TableName="treetable";

 

                     tree.NodeCodeColumnName="nodecode";

 

                     tree.NodeNameColumnName="nodename";

 

                     tree.ParentCodeColumnName="parentcode";

 

                     tree.CreateTree(this.TreeView1);

 

 

ztree实现表格风格的树状结构

本文地址:http://blog.csdn.net/duqian42707/article/details/52886220先来一张完成图:原理很简单:利用zTree的addDiyDom方法,自定义每...
  • duqian42707
  • duqian42707
  • 2016年10月21日 18:42
  • 10339

使用zTree控件制作的表格形式的树形+数据菜单

测试了一下,兼容ie7以上, chrome opera ff 不使用对方css /*------------------------------------- zTree Style ver...
  • qidizi
  • qidizi
  • 2014年10月21日 01:00
  • 26516

树形展示数据——dhtmlxTree的使用

在Java Web项目开发中,一般用JSP做前台数据展示,后台通过SSH框架来进行高效开发,有流程的控制,业务的处理和对数据库的各种处理,而数据则存放在Oracle等选择的数据库中。现在大家想这样一个...
  • liujiahan629629
  • liujiahan629629
  • 2014年04月03日 00:45
  • 20968

消息提醒展现方式

  • 2014年09月03日 16:05
  • 70KB
  • 下载

ios中UIImageView展现图片的不同处理方式

原文链接:http://www.cnblogs.com/lovecode/archive/2011/11/27/2265275.html#commentform iPhone图像通常存储在以下4...
  • zhanglei5415
  • zhanglei5415
  • 2012年07月03日 10:23
  • 12075

asp.net 二进制数据写入及读出以 图片方式展现

前端时间做视频智能监控,第三方自动拍照时保存至数据库,以二进制存入。 为了团队更方便后续关于此功能的开发。在此做下简易的总结:1. 数据库里 用 varbinary(MAX) , PerHomeL...
  • lzid2008
  • lzid2008
  • 2016年12月14日 23:27
  • 964

且看如何以精致的方式展现,解析和分析GitHub上语言的发展趋势

GitHut网站原文连接:http://githut.info/,其实这是一个非常简单的只有一个页面的网站。做的事情就是去通过GitHub Archive来获取到GitHub代码仓库的大数据然后进行分...
  • zhubaitian
  • zhubaitian
  • 2015年02月12日 16:41
  • 1230

Java创建二叉树的3种方式

  • 2017年12月05日 17:32
  • 5KB
  • 下载

simpleHtmlTree3.4,根据xml生成整棵树,Ajax方式动态加载节点

  • 2008年12月13日 00:26
  • 70KB
  • 下载

两种JS生成树方式的源码

  • 2009年04月26日 22:14
  • 5.05MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:树的展现方式
举报原因:
原因补充:

(最多只允许输入30个字)