Asp.net结合Extjs实现一次加载整个树和动态加载树

实现一次加载和点击节点后动态加载树。废话不多说,直接上代码。
数据库表:(Oracle)

  1. create table ComOrg  
  2. (  
  3.  ComOrg_ID integer primary key,  
  4.  ComOrg_Name nvarchar2(20) not null,  
  5.  ComOrg_ParentId integer not null  
  6. );  
  7.   
  8. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (1,'MyCompany',0);  
  9. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (2,'第一事业部',1);  
  10. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (3,'第三事业部',1);  
  11. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (4,'第七事业部',1);  
  12. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (5,'编辑部',4);  
  13. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (6,'多媒体事业部',4);  
  14. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (7,'广州分公司',1);  
  15. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (8,'上海分公司',1);  
  16. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (9,'武汉分公司',1);  
  17. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (10,'中国移动广州分公司',0);  
  18. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (11,'采编',5);  
  19. insert into ComOrg (ComOrg_ID,Comorg_Name,Comorg_Parentid) values (12,'创作部',2);  
  20. commit;  

主页面添加对Extjs中几个Js引用就不啰嗦了,关键代码:

  1. <mce:script type="text/javascript" language="javascript"><!--  
  2.         Ext.onReady(function(){  
  3.             // 一次加载所有节点  
  4.             var tree = new Ext.tree.TreePanel({  
  5.                 renderTo: "tree-div",  
  6.                 useArrows: true,  
  7.                 autoScroll: true,  
  8.                 animate: true,  
  9.                 enableDD: true,  
  10.                 containerScroll: true,  
  11.                 border: false,  
  12.                 // auto create TreeLoader  
  13.                 dataUrl: 'TempPage.aspx?tree=ss',  
  14.                 root: {  
  15.                     nodeType: 'async',  
  16.                     text: '公司架构',  
  17.                     draggable: false,  
  18.                     id: '-1'  
  19.                 },  
  20.                 listeners: {  
  21.                     click: function(n){  
  22.                         Ext.Msg.alert("Click Message","You clicked: "+n.attributes.text+"  NO. "+n.attributes.id);  
  23.                     }  
  24.                 }  
  25.             });  
  26.             tree.getRootNode().expand();  
  27.             //动态加载节点  
  28.             var treeLoader = new Ext.tree.TreeLoader({dataUrl: ""});  
  29.               
  30.             var treeexpend = new Ext.tree.TreePanel({  
  31.                 renderTo: "treeExpend",  
  32.                 useArrows: true,  
  33.                 autoScroll: true,  
  34.                 animate: true,  
  35.                 enableDD: false,//不允许拖动  
  36.                 containerScroll: true,  
  37.                 border: false,  
  38.                 loader: treeLoader,  
  39.                 root: {  
  40.                     nodeType: 'async',  
  41.                     text: '公司架构',  
  42.                     draggable: false,  
  43.                     expended: true,  
  44.                     id: '0'  
  45.                 },  
  46.                 listeners: {  
  47.                     click: function(n){  
  48.                         //Ext.Msg.alert("Click Message","You clicked: "+n.attributes.text+"  NO. "+n.attributes.id);  
  49.                         var div = Ext.get("divTest");  
  50.                         div.highlight();  
  51.                         Ext.MessageBox.show({  
  52.                             title: "MessageBoxDemo",  
  53.                             msg: "You clicked: "+n.attributes.text+"  NO. "+n.attributes.id,  
  54.                             width: 400,  
  55.                             buttons: Ext.MessageBox.OK  
  56.                         });  
  57.                     }  
  58.                 }  
  59.             });  
  60.             treeexpend.on('beforeload',   
  61.                 function(node){   
  62.                    treeexpend.loader.dataUrl="TempPage.aspx?parId="+node.id;    //定义子节点的Loader     
  63.                 });   
  64.             //treeexpend.getRootNode().expand();  
  65.         });  
  66.       
  67. // --></mce:script>  
  68.     <br />  
  69.     Load All: <br />  
  70.     <div id="tree-div" style="margin:5px 0px 0px 5px;" mce_style="margin:5px 0px 0px 5px;"></div><br />  
  71.     Async Load: <br />  
  72.     <div id="treeExpend" style="margin:5px 0px 0px 5px;" mce_style="margin:5px 0px 0px 5px;"></div>  

数据请求TempPage.aspx页面:

  1. protected void Page_Load(object sender, EventArgs e)  
  2.     {  
  3.         if(Request["tree"] != null)  
  4.         {  
  5.             Tree();  
  6.         }  
  7.         else if(Request["parId"] != null)  
  8.         {  
  9.             TreeByParentId();  
  10.         }          
  11.     }  
  12.   
  13.     public void Tree()  
  14.     {  
  15.         List<ComOrg> list = GetForTree(DComOrg.GetList(),0);  
  16.         string json = JsonConvert.SerializeObject(list);  
  17.         Response.Write(json.Replace("ComOrg_Name""text").Replace("ComOrg_ID""id").ToLower());  
  18.         Response.End();  
  19.     }  
  20.   
  21.     /// <summary>  
  22.     /// 根据指定节点获取所有子节点  
  23.     /// </summary>  
  24.     /// <param name="list"></param>  
  25.     /// <param name="parentId"></param>  
  26.     /// <returns></returns>  
  27.     public List<ComOrg> GetForTree(List<ComOrg> list,int parentId)  
  28.     {  
  29.         List<ComOrg> tempList = new List<ComOrg>();  
  30.         foreach(ComOrg co in list)  
  31.         {  
  32.             if(co.ComOrg_ParentId == parentId)  
  33.             {                  
  34.                 co.Children = GetForTree(list, co.ComOrg_ID);  
  35.                 tempList.Add(co);  
  36.                 continue;  
  37.             }  
  38.         }  
  39.         return tempList;  
  40.     }  
  41.   
  42.     public void TreeByParentId()  
  43.     {  
  44.         int parentId = Convert.ToInt32(Request["parId"]);  
  45.         List<ComOrg> list = DComOrg.GetListByParentId(parentId);  
  46.         string json = JsonConvert.SerializeObject(list);  
  47.         Response.Write(json.Replace("ComOrg_Name""text").Replace("ComOrg_ID""id").ToLower());  
  48.         Response.End();  
  49.     }  

后台DComOrg.cs文件:

  1. using Oracle.DataAccess.Client;  
  2.     public static List<ComOrg> GetList()  
  3.     {  
  4.         List<ComOrg> list = null;  
  5.         StringBuilder strSql = new StringBuilder();  
  6.         strSql.Append("SELECT COMORG_ID,COMORG_NAME,COMORG_PARENTID FROM COMORG");  
  7.         OracleDataReader reader = DBHelper.GetDataReader(strSql.ToString(), CommandType.Text);  
  8.         if(reader != null)  
  9.         {  
  10.             list = new List<ComOrg>();  
  11.             ComOrg co = null;  
  12.             while(reader.Read())  
  13.             {  
  14.                 co = new ComOrg();  
  15.                 co.ComOrg_ID = Convert.ToInt32(reader["ComOrg_ID"].ToString());  
  16.                 co.ComOrg_Name = reader["ComOrg_Name"].ToString();  
  17.                 co.ComOrg_ParentId = Convert.ToInt32(reader["ComOrg_ParentId"]);  
  18.                 co.Cls = "folder";  
  19.                 list.Add(co);  
  20.             }  
  21.         }  
  22.         reader.Close();  
  23.         reader.Dispose();  
  24.         return list;  
  25.     }  
  26.   
  27.     public static List<ComOrg> GetListByParentId(int parentId)  
  28.     {  
  29.         List<ComOrg> list = null;  
  30.         StringBuilder strSql = new StringBuilder();  
  31.         strSql.Append("SELECT COMORG_ID,COMORG_NAME,COMORG_PARENTID FROM COMORG WHERE COMORG_PARENTID=:COMORG_PARENTID");  
  32.         OracleParameter[] param = { new OracleParameter("@COMORG_PARENTID", OracleDbType.Int32, 4) };  
  33.         param[0].Value = parentId.ToString();  
  34.         OracleDataReader reader = DBHelper.GetDataReader(strSql.ToString(), CommandType.Text,param);  
  35.         if(reader != null)  
  36.         {  
  37.             list = new List<ComOrg>();  
  38.             ComOrg co = null;  
  39.             while(reader.Read())  
  40.             {  
  41.                 co = new ComOrg();  
  42.                 co.ComOrg_ID = Convert.ToInt32(reader["ComOrg_ID"].ToString());  
  43.                 co.ComOrg_Name = reader["ComOrg_Name"].ToString();  
  44.                 co.ComOrg_ParentId = Convert.ToInt32(reader["ComOrg_ParentId"]);  
  45.                 co.Cls = "folder";  
  46.                 list.Add(co);  
  47.             }  
  48.         }  
  49.         reader.Close();  
  50.         reader.Dispose();  
  51.         return list;  
  52.     }  

Model:

  1. using System;  
  2. using System.Data;  
  3. using System.Configuration;  
  4. using System.Web;  
  5. using System.Web.Security;  
  6. using System.Web.UI;  
  7. using System.Web.UI.WebControls;  
  8. using System.Web.UI.WebControls.WebParts;  
  9. using System.Web.UI.HtmlControls;  
  10. using System.Collections.Generic;  
  11. using Newtonsoft.Json;  
  12.   
  13. /// <summary>  
  14. /// ComOrg 的摘要说明  
  15. /// </summary>  
  16. public class ComOrg  
  17. {  
  18.     public ComOrg()  
  19.     {  
  20.         //  
  21.         // TODO: 在此处添加构造函数逻辑  
  22.         //  
  23.     }  
  24.       
  25.     private int comOrg_ID;  
  26.   
  27.       
  28.     public int ComOrg_ID  
  29.     {  
  30.         get { return comOrg_ID; }  
  31.         set { comOrg_ID = value; }  
  32.     }  
  33.     private string comOrg_Name;  
  34.       
  35.     public string ComOrg_Name  
  36.     {  
  37.         get { return comOrg_Name; }  
  38.         set { comOrg_Name = value; }  
  39.     }  
  40.     private int comOrg_ParentId;  
  41.     [JsonIgnore]  
  42.     public int ComOrg_ParentId  
  43.     {  
  44.         get { return comOrg_ParentId; }  
  45.         set { comOrg_ParentId = value; }  
  46.     }  
  47.   
  48.     private string _cls;  
  49.       
  50.     public string Cls  
  51.     {  
  52.         get { return _cls; }  
  53.         set { _cls = value; }  
  54.     }  
  55.   
  56.       
  57.     private List<ComOrg> children;  
  58.       
  59.     public List<ComOrg> Children  
  60.     {  
  61.         get { return children; }  
  62.         set { children = value; }  
  63.     }  
  64. }  
  

DBHelper类:

  1. using Oracle.DataAccess.Client;     
  2. public static String ConnectionString = "Data Source=orcl;User ID=hr;Password=hr;";     
  3.   
  4.     /// <summary>  
  5.     /// 获取DataReader对象  
  6.     /// </summary>  
  7.     /// <param name="queryString">T-SQL语句</param>  
  8.     /// <param name="commandType">命令类型</param>  
  9.     /// <param name="param">T-SQL参数</param>  
  10.     /// <returns>DataReader对象</returns>  
  11.     public static OracleDataReader GetDataReader(string queryString, CommandType commandType, params OracleParameter[] param)  
  12.     {  
  13.         OracleDataReader dataReader = null;  
  14.         OracleConnection con = new OracleConnection(ConnectionString);  
  15.         OracleCommand command = new OracleCommand(queryString, con);  
  16.         command.CommandType = commandType;  
  17.   
  18.         if(param != null)  
  19.         {  
  20.             for(int i = 0; i < param.Length; i++)  
  21.             {  
  22.                 command.Parameters.Add(param[i]);  
  23.             }  
  24.         }  
  25.         try  
  26.         {  
  27.             command.Connection.Open();  
  28.             dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);  
  29.         }  
  30.         catch(Exception ex)  
  31.         {  
  32.             throw ex;  
  33.         }  
  34.         return dataReader;  
  35.     }  

OK,数据插入数据库,修改数据连接直接运行!

(share:http://blog.csdn.net/Rock870210/archive/2010/12/10/6068028.aspx)

posted @ 2011-04-11 10:06  Kingdom_0  阅读(1845)  评论(0编辑  收藏  举报