数据库如何导出树状图

数据库如何导出树状图,第1张

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

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

/

查询全量菜单

@return

/

@Override

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

loginfo("查询全量树");

// 开始时间

long stime = SystemcurrentTimeMillis();

//查询相对机构

List<对象> OrgList = baseMapperselectList(null);

// 转换输出格式

List<输出对象> resOrgList = OrgListstream()map(u -> {

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

BeanUtilscopyProperties(u, name);

return name;

})collect(CollectorstoList());

//返回的树形结构数据

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

//循环菜单树形数据

for (输出对象menuTree : resOrgList) {

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

if ("00"equals(menuTreegetOrgClass())) {

treesadd(menuTree);

for (输出对象 it : resOrgList) {

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

if (menuTreegetOrgCode()equals(itgetOrgSuperCode())) {

if (menuTreegetOrgChildrenMap() == null) {

menuTreesetOrgChildrenMap(new ArrayList<>());

}

menuTreegetOrgChildrenMap()add(it);

}

}

}

}

// 结束时间

long etime = SystemcurrentTimeMillis();

loginfo("机构数查询耗时:" + (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(menuTreegetOrgClass())) {

treesadd(findChildren(menuTree,menuTrees));

}

}

return trees;

}

/

递归查找子节点

@param menuTree 菜单数对象

@param menuTrees 子节点

@return MenuTree

/

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

for (输出对象 it : menuTrees) {

if(menuTreegetOrgCode()equals(itgetOrgSuperCode())) {

if (menuTreegetChildren() == null) {

menuTreesetChildren(new ArrayList<输出对象>());

}

menuTreegetOrgChildrenMap()add(findChildren(it,menuTrees));

}

}

return menuTree;

}

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

/

查询全量菜单

@return

/

@Override

public List

querAllTree(TOrgInfoReq tOrgInfoReq) {

loginfo("查询全量树");

String orgPath = tOrgInfoReqgetOrgCode();

// 开始时间

long stime = SystemcurrentTimeMillis();

//查询相对机构

List

OrgList = tOrgInfoMapperqueryAllTree();

// 转换输出格式

List

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

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

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

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

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

>

sql2000安装好后,点开始—>所有程序—>Microsoft SQL Server先打开服务管理器,点击开始;然后打开企业管理器—>microsoft SQL Servers—>SQL Server组—>windows NT—>数据库—>表

解决方法很多!数据要存储为树形结构,那么数据要有父子关系。

一个父节点有多个子节点,一个子节点又有多个子子节点。

publicclassTreeNode{

/节点主键/

privateStringid;

/节点名称/

privateStringtext;

/子节点/

privateTreeNode[]children;

}

private DataSet ds;

private SqlDataAdapter sqlDataAdapter1;

private int maxnodeid;

private void Form1_Load(object sender, SystemEventArgs e)

{

string strconn=ConfigurationSettingsAppSettings["ConnStr"];

sqlConnection1 = new SqlConnection(strconn);

thissqlConnection1Open();

//填充DataSet

thisCreateDataSet();

//从数据库中读取数据,通过递归生成树。

InitTree(thistreeView1Nodes,"0");

}

private void CreateDataSet()

{

thissqlDataAdapter1=new SqlDataAdapter("select from s_menu ",thissqlConnection1);

thisds=new DataSet();

thissqlDataAdapter1Fill(ds,"tree");

}

private void InitTree(TreeNodeCollection Nds,string parentId)

{

DataView dv=new DataView();

TreeNode tmpNd;

string intId;

dvTable=dsTables["tree"];

dvRowFilter="ParentId='" + parentId + "'" ;

foreach(DataRowView drv in dv)

{

tmpNd=new TreeNode();

tmpNdTag=drv["NodeId"]ToString();

tmpNdText=drv["NodeName"]ToString();

NdsAdd(tmpNd);

intId=drv["ParentId"]ToString();

InitTree(tmpNdNodes,tmpNdTagToString());

}

}

//新增节点 *** 作

private void insert(string type)

{//判断是新增树节点,还是子节点

string strinsert="insert into s_menu values('{0}','{1}','{2}')";

string strformat="";

if(type=="sub")

strformat=stringFormat(strinsert,maxnodeidToString(),thisselectnodeTagToString(),thisstrcomm);

else

strformat=stringFormat(strinsert,maxnodeidToString(),"0",thisstrcomm);

SqlCommand cmd=new SqlCommand(strformat,thissqlConnection1);

cmdExecuteNonQuery();

}

//为新增节点算出最大的节点值,并以此值作为新增的节点ID值

private int GetMaxNodeid()

{

int pre=0,last=0;

DataSet maxds=new DataSet();

thissqlDataAdapter1=new SqlDataAdapter("select nodeid from s_menu order by nodeid",thissqlConnection1);

thissqlDataAdapter1Fill(maxds);

for(int i=0;i{

if(i+1{

pre=intParse(maxdsTables[0]Rows[i][0]ToString());

last=intParse(maxdsTables[0]Rows[i+1][0]ToString());

if(last-pre!=1)

return pre+1;

}

}

return last+1;

}

private void getallnode(TreeNode tn)

{

foreach(TreeNode node in tnNodes)

{

listAdd(nodeTagToString());

if(nodeNodesCount>0)

{

getallnode(node);

}

}

}

private void treeView1_MouseDown(object sender, SystemWindowsFormsMouseEventArgs e)

{

//判断是否点击了某个节点

thisselectnode= thistreeView1GetNodeAt (eX ,eY );

if(selectnode==null)

thisisselected=false;

else

thisisselected=true;

}

private void menuAdd_Click(object sender, SystemEventArgs e)

{//判断是否点击了某个节点,若没有点击了,则是新增一个树节点

if(isselected==false)

{//算出新增树节点的ID值

maxnodeid=GetMaxNodeid();

TreeNode tmpNd=new TreeNode();

//赋值

tmpNdTag=thismaxnodeidToString();

FormCommon frmCommon=new FormCommon();

DialogResult result= frmCommonShowDialog();

if(result==DialogResultOK)

{//取到新增树节点的文本值

tmpNdText=frmCommonstrcomm;

thisstrcomm=frmCommonstrcomm;

//新增树节点

thistreeView1NodesAdd(tmpNd);

//插入数据库(说明插入的是树节点)

thisinsert("root");

//展开

thisselectnodeExpand();

}

}

else

{//判断是否点击了某个节点,若点击了,则是新增一个子节点

thiscontextAddSub();

}

}

private void contextAddSub()

{//得到新增子节点的ID值

maxnodeid=GetMaxNodeid();

TreeNode tmpNd=new TreeNode();

//赋值

tmpNdTag=thismaxnodeidToString();

FormCommon frmCommon=new FormCommon();

DialogResult result= frmCommonShowDialog();

if(result==DialogResultOK)

{//取到新增树节点的文本值

tmpNdText=frmCommonstrcomm;

thisstrcomm=frmCommonstrcomm;

//新增子节点

thisselectnodeNodesAdd(tmpNd);

//插入数据库(说明插入的是子节点)

thisinsert("sub");

//展开

thistreeView1SelectedNodeExpand();

}

}

//删除节点 *** 作

private void menuDel_Click(object sender, SystemEventArgs e)

{//新建一个ArrayList,用于保存要删除的节点下边的所有子节点

list=new ArrayList();

if(thisisselected==true)

{//得到删除的节点下边的所有子节点

getallnode(thisselectnode);

//把要删除的节点也加进去

listAdd(thisselectnodeTagToString());

//循环从数据库中删除

for(int i=0;i{

string strdel="delete s_menu where nodeid='{0}'";

string strformat="";

strformat=stringFormat(strdel,list[i]);

SqlCommand cmd=new SqlCommand(strformat,thissqlConnection1);

cmdExecuteNonQuery();

}

//从树中删除

thisselectnodeRemove();

}

}

//修改节点的值

private void menuEdit_Click(object sender, SystemEventArgs e)

{

if(thisisselected==true)

{

FormCommon frmCommon=new FormCommon();

DialogResult result= frmCommonShowDialog();

if(result==DialogResultOK)

{

string strdel="update s_menu set nodename= '{1}' where nodeid='{0}'";

string strformat="";

strformat=stringFormat(strdel,thisselectnodeTagToString(),frmCommonstrcomm);

SqlCommand cmd=new SqlCommand(strformat,thissqlConnection1);

cmdExecuteNonQuery();

thisselectnodeText=frmCommonstrcomm;

}

}

}

//遍历所有节点查找值

private void getvaluenode(TreeNodeCollection tn,string value)

{

foreach(TreeNode node in tn)

{

if(nodeNodesCount>0)

{

getvaluenode(nodeNodes,value);

}

if(nodeText==value)

listnodeAdd(node);

}

}

private void menuSearch_Click(object sender, SystemEventArgs e)

{

int j,k;

thislistnode=new ArrayList();

FormCommon frmCommon=new FormCommon();

DialogResult result= frmCommonShowDialog();

if(result==DialogResultOK)

{

TreeNode n =new TreeNode();

TreeNode temp=new TreeNode();

//下面的函数是填充listnode;

getvaluenode(thistreeView1Nodes,frmCommonstrcomm);

for(int i=0;i{

j=0;k=0;

n=(TreeNode)listnode[i];

if (n != null)

{

temp=n;

//得到上面结点的数量,并将数量保存到变量j;

for(;nParent!=null;)

{

n=nParent;

j++;

}

//恢复原值

n=temp;

//新建一个树结点数组做保存得到查询到的所有节点

TreeNode[] m=new TreeNode[j];

for(;nParent!=null;)

{

n=nParent;

m[k]=n;

k++;

}

for(int p=0;pm[p]Expand();

n=temp;

nForeColor=ColorRed;

}

}

}

}

private void treeView1_AfterLabelEdit(object sender, SystemWindowsFormsNodeLabelEditEventArgs e)

{

if(thistreeView1SelectedNodeText!=null)

{

string strdel="update s_menu set nodename= '{1}' where nodeid='{0}'";

string strformat="";strformat=stringFormat(strdel,thistreeView1SelectedNodeTagToString(),eLabelToString());SqlCommand cmd=new SqlCommand(strformat,thissqlConnection1);

cmdExecuteNonQuery();

}

}

private void treeView1_AfterSelect(object sender, SystemWindowsFormsTreeViewEventArgs e)

{

thislistBox1ItemsClear();

thislistBox1ItemsAdd(thistreeView1SelectedNodeFullPathToString());

}

}

}

定义一个TreeNode类里面有

id 自身id

parentId 父节点id

name 树显示文本

url 链接地址

open 是否展开树

等属性

将从数据库查出来的数据一个个set到TreeNode里面封装成一个List<TreeNode>

再将这个List转换成你的树所需要的格式内容比如json格式

数据库里面最常用的排序算法莫过于合并排序。

优化的查找算法如二分查找、二叉树查找等,虽然查找效率提高了。但是各自对检索的数据都有要求:二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构。

数据库查询是数据库的主要功能之一,最基本的查询算法是顺序查找时间复杂度为O(n),显然在数据量很大时效率很低。优化的查找算法如二分查找、二叉树查找等,虽然查找效率提高了。

以上就是关于数据库如何导出树状图全部的内容,包括:数据库如何导出树状图、数据库中树形图的用法、sql2000 数据表树形结构图 怎么打开等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9538486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存