Ext动态树详解

最近在学习Ext,在园子里也看了好多别人的文章,今天自己动手来实现一个动态树。首先先看效果图吧

 

 

 

 

 

 

 

效果就如上面所示,接下来一步一步来实现吧!代码只贴关键部分!

第一 数据库表的设计 还是请大家看图

很简单的表,就不说了。

第二 数据层用Linq 文件是:TreeLinqAccess

代码
复制代码
   
   
public List < TreeItem > GetTreeByPid(string pid) { var q = from t in db.TreeItem where t.pid == pid select t; return q.ToList(); }
复制代码

第三 数据层与Ext的交互用ashx类型的一般处理程序

 

代码
复制代码
   
   
public void GetTreeNode() { object node = Convert.ToString(Request[ " node " ]); if (node != null ) { StringBuilder jsonData = new StringBuilder(); string pid = Request[ " node " ].Trim(); List < TreeItem > ls = access.GetTreeByPid(pid); if (ls.Count > 0 ) { jsonData.Append( " [ " ); foreach (TreeItem nodes in ls) { { JsonConvert < TreeItem > json = new JsonConvert < TreeItem > (); bool isLeaf = access.GetTreeByPid(nodes.id).Count == 0 ? true : false ; string nodeJsonString = json.ToTreeNode(nodes.id, nodes.text, isLeaf).ToString(); jsonData.Append(nodeJsonString); jsonData.Append( " , " ); } } // 去掉末尾“,”号 if (jsonData[jsonData.Length - 1 ] == ' , ' ) { jsonData.Remove(jsonData.Length - 1 , 1 ); } jsonData.Append( " ] " ); } Response.Write(jsonData); Response.End(); } }
复制代码

这里简单说明下:

  1 access是上面Linq的实例 如:TreeLinqAccess access = new TreeLinqAccess()

  2 Request["node"] 接收到的node是对应ext树的id

  3 toTreeNode是app_code里的方法

代码
复制代码
   
   
public StringBuilder ToTreeNode( string id, string text, bool isLeaf) { StringBuilder jsonData = new StringBuilder(); jsonData.Append( " { " ); jsonData.Append( " id:' " ); jsonData.Append(id); jsonData.Append( " ',text:' " ); jsonData.Append(text); jsonData.Append( " ' " ); jsonData.Append( " ,leaf: " ); jsonData.Append(isLeaf.ToString().ToLower()); jsonData.Append( " } " ); return jsonData; }
复制代码

第四 ext代码

 

代码
复制代码
   
   
var dTree = new Ext.tree.TreePanel({ id: ' myDynamicTree ' , renderTo: ' mainTab_DynamicTree ' , title: ' Ext动态树 ' , width: 150 , animate: true , // 以动画形式伸展,收缩子节点 collapsible: true , autoHeight: true , autoScroll: true , rootVisible: true , // lines:true, // useArrows: true, //小箭头样式 默认是+- loader: new Ext.tree.TreeLoader({ dataUrl: " ../Service/TreeService.ashx?Method=GetTreeNode " }), root: new Ext.tree.AsyncTreeNode({ id: ' 0 ' , text: ' 根节点 ' , expanded: true }), listeners: // 监听事件 { ' click ' : function (node, e) { Ext.MessageBox.alert( " 点击的节点 " , " text: " + node.text + " | " + " id: " + node.id); } } });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值