本树的数据从结构化查询语言的表中提取而来,sql表的结构如下:
上面的表中parentmodeuleID是代表父身份的标志,如果当前节点为根节点,则规定为0.
然后就是如何将上面的单表来组成树状结构。这时我们可以利用迁移实例来加载数据库模型来实现,具体树类如下:
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。用户界面命名空间角色权限1{公共类树{公共int ModuleID { get设置;} public int ParentID { get设置;}公共字符串ModulePath { get设置;}公共字符串ModuleName { get设置;} }}然后就是在公共处理页面,将数据库的数据进行组织,形成符合框架树的数据格式,具体代码如下:
[网络方法]公共静态字符串GetJson(){ string JSON='[';ilist树t=db。returnparenttree();foreach(t中的树模型){ if (model!=t[t . Count-1]){ JSON=GetJsonByModel(model)',';} else { json=GetJsonByModel(模型);} } JSON=']';json=json .替换(""、"");返回json}公共静态字符串GetJsonByModel(Tree t){ string JSON=' ';弯曲件标志=db。ishawechild(t . Moduleid);json='{' ''id':'' t.ModuleID ' ',' ' ' text':'' t.ModuleName ' ',' ' ' value':'' t.ModuleID ' ',' ' ' showcheck':true ',' checkstate':'0 ',' ' ' hasChildren': '标志ToString().ToLower()',' ' ' isexpand':false ',' ChildNodes ' :/*奶奶的,这个地方一定要注意是子节点而不是子节点害得我无语了*/if(!标志){ json='null ',JSON=' complete ' : false } } else { JSON='[';ilist树列表=数据库。getchild(t . Moduleid);foreach(列表中的树树){ if (tree!列表.count-1]){ JSON=GetJsonByModel(tree)',';} else { JSON=GetJSonBymodel(tree);} } json='],' complete ' :true }}返回json}上面就是利用递归的方式来将数据库的数据组合成合适的数据数据,利用到的数据库操作类代码如下:
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统。数据;使用系统数据。程序命名空间角色权限1{公共类数据库{ 0公共静态只读字符串系统.配置。配置管理器。app settings[' CONtrol '];公共静态SqlConnection GetConn(){ SqlConnection conn=new SqlConnection(connStr);conn . Open();返回conn}公共静态DataTable GetDT(字符串SQL){ DataTable dt=new DataTable();使用(SqlConnection conn=DB .getConn()){ Sqldatadapter sda=new Sqldatadapter(SQL,conn);sda .填充(dt);}返回dt;}公共静态ilist tree returnParentTree(){ ilist tree t=new listree();字符串sql='从[ParentModuleID]=0的模型中选择*按OrderBy asc排序;DataTable dt=Getdt(SQL);foreach(dt中的数据行dr .行){ Tree t parent=new Tree();透明度.ModuleID=Int32 .解析(博士[身份证]).ToString());透明度.ModuleName=dr['ModuleName'].ToString();透明度.ModulePath=dr['MenuPath'].ToString();透明度.ParentID=Int32 .解析(dr['ParentModuleID'].ToString());添加(透明);}返回t;} public static bool Ishavechild(int id){ bool标志=false字符串sql='从模型中选择标识,其中ParentModuleID=' idDataTable dt=Getdt(SQL);if (dt .行数。计数0) {标志=真;}返回标志;}公共静态ilist树getChild(int id){ ilist树t=new listree();字符串sql='从ParentModuleID=' id '的模型中选择*;DataTable dt=Getdt(SQL);foreach(dt中的数据行dr .行){ Tree t parent=new Tree();透明度.ModuleID=Int32 .解析(博士[身份证]).ToString());透明度.ModuleName=dr['ModuleName'].ToString();透明度.ModulePath=dr['MenuPath'].ToString();透明度.ParentID=Int32 .解析(dr['ParentModuleID'].ToString());添加(透明);}返回t;} }}好了,当数据数据处理好以后,就可以将数据打到前台,交给框架来处理了,
% @ Page Language=' c# ' AutoEventWireup=' true '代码在=' default '之前。aspx。cs ' Inherits=' roleupermission1 ._默认"%!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN ' ' http://www .w3。L1-过渡时期。DTD ' html xmlns=' http://www .w3。org/1999/XHTML ' head runat=' server ' title/title script src=' http : jquery。treeview/lib/jquery。js ' type=' text/JavaScript '/' ready(function(){ $).ajax({ type: 'post ',内容类型: ' application/JSON;charset=utf-8 ',dataType: 'json ',url: 'WebForm1.aspx/GetJson ',成功:函数(数据){ var o={ show check : true };o .数据=评估(数据。d);$('#showTree ').树形视图(o);} });});$(“# show checked”).单击(函数(e) { var s=$('#showTree ').getsvs();如果!=null) alert(s.join(',');其他警报("空");});/script/html好了,来看看加载结果吧:
制作过程中需要注意的是:首先,递归必须正确;其次注意射流研究…大小写("子节点"被我写成了子节点,花费了我一天时间才调整过来晕哦)再者就是可以直接调用公共页面的方法,只要在方法前面加上[webmethod]标记即可。