首页数据库树形数据库 数据库中树形图的用法

树形数据库 数据库中树形图的用法

编程之家2023-10-20100次浏览

大家好,今天来为大家解答树形数据库这个问题的一些问题点,包括数据库中树形图的用法也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

树形数据库 数据库中树形图的用法

数据库中树形图的用法

数据库中树形图的用法的用法你知道吗?下面我就跟你们详细介绍下数据库中树形图的用法的用法,希望对你们有用。

数据库中树形图的用法的用法如下:

树形图用于显示按照树形结构进行组织的数据,其用途比较广泛,如计算机中的文件系统(Windows中的资源管理器)、企业或公司的组成结构等。我们知道在Windows下VB、PB、Delphi等工具提供了一个功能很强的树型控件TreeView,利用Treeview控件可以方便地开发树形图。然而在网页上实现树形图就不那么容易了,现在在asp.net中利用微软提供的Internet Explorer WebControls它使得网页上的树形图开发与在Windows下一样的方便,一样的功能强大,甚至更灵活。

本文介绍用Internet Explorer WebControls开发树形图的方法,由于树形图结构较复杂,使用起来常不知如何下手。笔者结合最近刚为公司用ASP.NET编写的应用程序管理器这一具体实例,详细阐述在ASP.NET下如何将Internet Explorer WebControls的使用与数据库联系起来,实现数据分任意多层显示,方便地进行增加、修改、删除、移动操作。笔者希望通过对该实例的阐述,达到抛砖引玉的效果,与各位同仁相互交流,共同进步。

Internet Explorer WebControls不在VS.NET的标准Server Control中,要到微软的站点上下载,下载地址是:

http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp

树形数据库 数据库中树形图的用法

下载安装后第一次使用时,要右击工具箱Customize Toolbox…→.NET Framework Components中找到Micosoft.Web.UI.WebControls.Treeview后选中,这样Treeview控件就出现在工具箱中了。

一、树的建立

具体方法是:创建一个数据库,设计树图信息表TREE_INFO,包含NODEID、PARENTID、NODENAME、ADDErss、ICON字段,其它字段根据实际业务而定,节点名称NODENAME将在树型控件的节点上显示,NODEID字段保存节点的唯一标识号,PARENTID表示当前节点的父节点号,标识号组成了一个“链表”,记录了树上节点的结构。设计一个Web窗体其上放置TreeView控件。

PRivate Sub CreateDataSet()’建立数据集

Dim myConn As New SqlConnection()

Dim myCmd As New SqlCommand("select NODEID,NODENAME,PARENTID,ADDRESS,ICON from Tree_info", myConn)

树形数据库 数据库中树形图的用法

Dim myDataAdapter As New SqlDataAdapter()

myConn.ConnectionString= application("connectstring")

myCmd.CommandText=""

myCmd.Connection= myConn

myDataAdapter.SelectCommand= myCmd

myDataAdapter.Fill(ds,"tree")

End Sub

建树的基本思路是:从根节点开始递归调用显示子树

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

CreateDataSet()

intiTree(TreeView1.Nodes, 0)

End Sub

Private Sub intiTree(ByRef Nds As TreeNodeCollection, ByVal parentId As Integer)

Dim dv As New DataView()

Dim drv As DataRowView

Dim tmpNd As TreeNode

Dim intId As Integer

dv.Table= ds.Tables("tree")

dv.RowFilter="PARENTID=’"& parentId&"’"

For Each drv In dv

tmpNd= New TreeNode()

strId= drv("NODE_ID")

tmpNd.ID= strId

tmpNd.Text= drv("NODE_NAME")

tmpNd.ImageUrl= drv("ICON").ToString

Nds.Add(tmpNd)

intiTree(Nds(Nds.Count- 1).Nodes, intId)

Next

End Sub

二、增加、删除树节点

单纯在Treeview上增加、删除、修改节点只需用Nodes属性的Add、 Remove、等方法即可,值得注意的地方是VS.NET中Treeview的Nodes集合与VS6.0中的区别,VS6.0中的是一个大的集合,而VS.NET中的是分层的每个Node下都有Nodes属性。增加、删除、修改树节点时与VS6.0相比有很大差别,特别是删除时。

Private Sub ButAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButAdd.Click’在选定的节点下添加子节点

Dim tmpNd As New TreeNode(), NdSel As TreeNode

tmpNd.ID= GetNewId()

NdSel= TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)’选中的节点

tmpNd.Text="新节点"

NdSel.Nodes.Add(tmpNd)

Dim myRow As DataRow

myRow= ds.Tables("tree").NewRow()

myRow("NODE_NAME")= tmpNd.ID

myRow("NODE_DESCRipT")="新节点"& tmpNd.ID&"_"& NdSel.ID

myRow("PARENT_NAME")= NdSel.ID

ds.Tables("tree").Rows.Add(myRow)

End Sub

Private Sub ButDele_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButDele.Click’删除选中的节点

Dim idx As String= TreeView1.SelectedNodeIndex()

GetNdCol(idx).Remove(TreeView1.GetNodeFromIndex(idx))

Dim dv As New DataView(), recNo As Integer

dv.Table= ds.Tables("tree")

dv.RowFilter="NODEID="& NdId

dv.Delete(0)

End Sub

Private Function GetNdCol(ByVal idx As String) As TreeNodeCollection

‘获得选中节点的父节点的Nodes集合

Dim cnt As Integer, i As Integer

Dim tmpNds As TreeNodeCollection

Dim idxs() As String

idxs= Split(idx,".")

cnt= UBound(idxs)

If cnt= 0 Then

tmpNds= TreeView1.Nodes

Else

tmpNds= TreeView1.Nodes(CInt(idxs(0))).Nodes

For i= 1 To cnt- 1

tmpNds= tmpNds(CInt(idxs(i))).Nodes

Next

End If

Return tmpNds

End Function

三、修改、移动树节点

由于服务器控件不支持鼠标拖动事件,所以不能象Windows程序那样通过拖动移动节点,这里是通过选择父节点的方式。移动是通过在原位置删除,新位置添加实现的,要注意在删除时先保存节点信息。

Private Sub TreeView1_SelectedIndexChange(ByVal sender As Object, ByVal e As Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles TreeView1.SelectedIndexChange

Dim dv As New DataView()

dv.Table= ds.Tables("tree")

Dim tmpNd As TreeNode= TreeNdSel(e.OldNode), tmpNds As TreeNodeCollection

dv.RowFilter="NODEID="& tmpNd.ID

dv(0)("NODE_DESCRIPT")= Me.TextBox1.Text

dv(0)("ADDRESS")= Me.TextBox2.Text

dv(0)("TARGET")= Me.TextBox3.Text

dv(0)("ICON")= Me.TextBox4.Text

If dv(0)("PARENTID").ToString<> Me.DropDownList1.SelectedItem.Value Then

‘移动节点

dv(0)("PARENT_NAME")= Me.DropDownList1.SelectedItem.Value

If Me.DropDownList1.SelectedItem.Value="ROOT" Then

tmpNds= TreeView1.Nodes

Else

tmpNds= FromIdToNode(Me.DropDownList1.SelectedItem.Value, TreeView1.Nodes).Nodes’新的父节点的Nodes集合

End If

GetNdCol(e.OldNode).Remove(tmpNd)

tmpNds.Add(tmpNd)

End If

tmpNd.Text= Me.TextBox1.Text

tmpNd.ImageUrl= Me.TextBox4.Text

tmpNd= TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)

dv.RowFilter="NODEID="& tmpNd.ID

Me.TextBox1.Text= dv(0)("NODENAME").ToString

Me.TextBox2.Text= dv(0)("ADDRESS").ToString

Me.TextBox3.Text= dv(0)("TARGET").ToString

Me.TextBox4.Text= dv(0)("ICON").ToString

End Sub

Private Function FromIdToNode(ByVal ID As String, ByVal Nds As TreeNodeCollection) As TreeNode

‘由关键字查找节点

Dim i As Integer

Dim tmpNd As TreeNode, tmpNd1 As TreeNode

For Each tmpNd In Nds

If tmpNd.ID= ID Then

Return tmpNd

Exit Function

End If

tmpNd1= FromIdToNode(ID, tmpNd.Nodes)

If Not(tmpNd1 Is Nothing) Then

Return tmpNd1

Exit Function

End If

Next

Return Nothing

End Function

数据库主要有哪几种数据模型

一.数据模型的分类:

最常用的数据模型是概念数据模型和结构数据模型。

1.概念数据模型:面向用户的,按照用户的观点进行建模。

2.结构数据模型:面向计算机系统的,用于DBMS的实现。

二.E-R图:

1.E-R实体联系图是直观表示概念模型的工具,其中包含了实体、联系、属性三个成分,联系的方法为一对一(1:1)、一对多(1:N)、多对多(M:N)三种方式。

2.E-R模型图,既表示实体,也表示实体之间的联系,是现实世界的抽象,与计算机系统没有关系,是可以被用户理解的数据描述方式。

三.层次模型:

1.层次模型采取树形结构表示数据与数据之间的关系。

2.层次模型不能直接表示多对多的联系。

四.网状模型:

1.用网络结构表示数据与数据之间的联系的模型。

2.网状模型子节点和父节点联系不唯一,需要为联系命名。

五.关系模型:

1.关系模型是目前最常见的数据模型之一,主要采用表格结构表达实体集以及实体之间的联系。

2.关系是一张表,关系数据模型由若干个表组成。

数据库如何导出树状图

2022-04-02 16:58·字数:37·阅读:450

1、查询全量菜单(双层循环方式)

/**

*查询全量菜单

*

*@return

*/

@Override

public List<输出对象> querAllTree(){

log.info("查询全量树");

//开始时间

long stime= System.currentTimeMillis();

//查询相对机构

List<对象> OrgList= baseMapper.selectList(null);

//转换输出格式

List<输出对象> resOrgList= OrgList.stream().map(u->{

输出对象 name= new输出对象();

BeanUtils.copyProperties(u, name);

return name;

}).collect(Collectors.toList());

//返回的树形结构数据

List<输出对象> trees= new ArrayList<>();

//循环菜单树形数据

for(输出对象menuTree: resOrgList){

//菜单级别为0,则是一级数据,根据实际情况判断可修改相关关联判断

if("00".equals(menuTree.getOrgClass())){

trees.add(menuTree);

for(输出对象 it: resOrgList){

//找出一级菜单下面的所有二级菜单,并加入到list中去

if(menuTree.getOrgCode().equals(it.getOrgSuperCode())){

if(menuTree.getOrgChildrenMap()== null){

menuTree.setOrgChildrenMap(new ArrayList<>());

}

menuTree.getOrgChildrenMap().add(it);

}

}

}

}

//结束时间

long etime= System.currentTimeMillis();

log.info("机构数查询耗时:"+(etime- stime)+"毫秒");

return trees;

}

2、查询全量菜单(递归方式)

/**

*使用递归方法建树

*@param menuTrees子节点集合

*@return List

*/

public static List<输出对象> buildByRecursive(List<输出对象> menuTrees){

List<输出对象> trees= new ArrayList<>();

for(输出对象 menuTree: menuTrees){

//菜单级别为00,则是一级数据,根据实际情况判断可修改相关关联判断

if("00".equals(menuTree.getOrgClass())){

trees.add(findChildren(menuTree,menuTrees));

}

}

return trees;

}

/**

*递归查找子节点

*@param menuTree菜单数对象

*@param menuTrees子节点

*@return MenuTree

*/

private static输出对象 findChildren(输出对象 menuTree,List<输出对象> menuTrees){

for(输出对象 it: menuTrees){

if(menuTree.getOrgCode().equals(it.getOrgSuperCode())){

if(menuTree.getChildren()== null){

menuTree.setChildren(new ArrayList<输出对象>());

}

menuTree.getOrgChildrenMap().add(findChildren(it,menuTrees));

}

}

return menuTree;

}

3、全部菜单树(一次循环)

/**

*查询全量菜单

*

*@return

*/

@Override

public List

querAllTree(TOrgInfoReq tOrgInfoReq){

log.info("查询全量树");

String orgPath= tOrgInfoReq.getOrgCode();

//开始时间

long stime= System.currentTimeMillis();

//查询相对机构

List

OrgList= tOrgInfoMapper.queryAllTree();

//转换输出格式

List

关于树形数据库到此分享完毕,希望能帮助到您。

商业组织的顶级域名,中国的因特网域名体系中,商业组织的顶级域名是什么美国cn2云服务器?美国vps cn2 是什么意思