基于JQuery的asp.net树实现代码


Posted in Javascript onNovember 30, 2010

本tree的数据从sql的表中提取而来,sql表的结构如下:

基于JQuery的asp.net树实现代码

上面的表中  parentmodeuleID是代表父ID的标志,如果当前节点为根节点,则规定为0. 

然后就是如何将上面的单表来组成树状结构.这时我们可以利用IList来加载数据库models来实现,具体Tree类如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;


namespace RolePermission1
{
 public class Tree
 {
  public int ModuleID { get; set; }

  public int ParentID { get; set; }

  public string ModulePath { get; set; }

  public string ModuleName { get; set; }

  
 }
}

然后就是在公共处理页面,将数据库的数据进行组织,形成符合jquery tree的json格式,具体代码如下:

[WebMethod]
  public static string GetJson()
  {
   string json = "[";
   IList<Tree> t = DB.returnParentTree();
   foreach (Tree model in t)
   {
    if (model != t[t.Count - 1])
    {
     json += GetJsonByModel(model) + ",";
    }
    else
    {
     json += GetJsonByModel(model);
    }
   }
   json += "]";
   json=json.Replace("'","\"");
   return json;
  }

  public static string GetJsonByModel(Tree t)
  {
   string json = "";
   bool flag = DB.isHaveChild(t.ModuleID);

   json = "{"
      + "'id':'" + t.ModuleID + "',"
      + "'text':'" + t.ModuleName + "',"
      + "'value':'" + t.ModuleID + "',"
      + "'showcheck':true,"
      + "'checkstate':'0',"
      + "'hasChildren':" + flag.ToString().ToLower() + ","
      + "'isexpand':false,"
      + "'ChildNodes':"; /*奶奶的,这个地方一定要注意是ChildNodes 而不是childNodes 害得我无语了*/
   if (!flag)
   {
    json += "null,";
    json += "'complete':false}";
   }
   else
   {
    json += "[";
    IList<Tree> list = DB.getChild(t.ModuleID);
    foreach (Tree tree in list)
    {
     if (tree != list[list.Count - 1])
     {
      json += GetJsonByModel(tree) + ",";
     }
     else
     {
      json += GetJsonByModel(tree);
     }
    }
    json += "],'complete':true}";
   }
   return json;
  }

上面就是利用递归的方式来将数据库的数据组合成合适的json数据,利用到的数据库操作类代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;

namespace RolePermission1
{
 public class DB
 {

  public static readonly string connStr=System.Configuration.ConfigurationManager.AppSettings["connStr"];

  public static SqlConnection GetConn()
  {
   SqlConnection conn = new SqlConnection(connStr);
   conn.Open();
   return conn;
  }

  public static DataTable GetDT(string sql)
  {
   DataTable dt = new DataTable();
   using (SqlConnection conn = DB.GetConn())
   {
    SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
    sda.Fill(dt);
   }
   return dt;
  }

  public static IList<Tree> returnParentTree()
  {
   IList<Tree> t = new List<Tree>();
   string sql = "select * from Models where [ParentModuleID]=0 order by OrderBy asc";
   DataTable dt = GetDT(sql);
   foreach (DataRow dr in dt.Rows)
   {
    Tree tParent = new Tree();
    tParent.ModuleID = Int32.Parse(dr["ID"].ToString());
    tParent.ModuleName = dr["ModuleName"].ToString();
    tParent.ModulePath = dr["MenuPath"].ToString();
    tParent.ParentID = Int32.Parse(dr["ParentModuleID"].ToString());
    t.Add(tParent);
   }
   return t;
  }

  public static bool isHaveChild(int id)
  {
   bool flag=false;
   string sql = "select ID from Models where ParentModuleID="+id+"";
   DataTable dt = GetDT(sql);
   if (dt.Rows.Count > 0)
   {
    flag = true;
   }
   return flag;
   
  }
  public static IList<Tree> getChild(int id)
  {
   IList<Tree> t = new List<Tree>();
   string sql = "select * from Models where ParentModuleID=" + id + "";
   DataTable dt = GetDT(sql);
   foreach (DataRow dr in dt.Rows)
   {
    Tree tParent = new Tree();
    tParent.ModuleID = Int32.Parse(dr["ID"].ToString());
    tParent.ModuleName = dr["ModuleName"].ToString();
    tParent.ModulePath = dr["MenuPath"].ToString();
    tParent.ParentID = Int32.Parse(dr["ParentModuleID"].ToString());
    t.Add(tParent);
   }
   return t;
  }

 }
}

好了,当json数据处理好以后,就可以将json打到前台,交给jquery来处理了,

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="RolePermission1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
 <title></title>
 <script src="jquery.treeview/lib/jquery.js" type="text/javascript"></script>
 <link href="jquery.treeview/tree.css" rel="stylesheet" type="text/css" />
 <script src="jquery.treeview/common.js" type="text/javascript"></script>
 <script src="jquery.treeview/jquery.tree.js" type="text/javascript"></script>
</head>
<body>
 <form id="form1">
  <button id="showchecked" runat="server">Get Selected Nodes</button>
 <div id="showTree" class="filetree">
 </div>
 </form>
</body>
 <script type="text/javascript">
  $(document).ready(function() {
  $.ajax({
   type: "post",
   contentType: "application/json;charset=utf-8",
   dataType: "json",
   url: "WebForm1.aspx/GetJson",
   success: function(data) {
    var o = { showcheck: true };
    o.data = eval(data.d);
    $("#showTree").treeview(o);
   }
   });
 });
 $("#showchecked").click(function(e) {
  var s = $("#showTree").getTSVs();
  if (s != null)
   alert(s.join(","));
  else
   alert("NULL");
 });
 </script>
</html>

好了,来看看加载结果吧:

基于JQuery的asp.net树实现代码

制作过程中需要注意的是:首先,递归必须正确;其次注意js大小写('ChildNodes'被我写成了'childNodes',花费了我一天时间才调整过来 晕哦) 再者就是可以直接调用公共页面的方法,只要在方法前面加上[webmethod]标记即可.

Javascript 相关文章推荐
Prototype 学习 Prototype对象
Jul 12 Javascript
javascript中window.event事件用法详解
Dec 11 Javascript
Extjs4中Form的使用之本地hiddenfield
Nov 26 Javascript
javascript校验价格合法性实例(必须输入2位小数)
May 05 Javascript
jquery模拟实现鼠标指针停止运动事件
Jan 12 Javascript
js仿淘宝和百度文库的评分功能
May 15 Javascript
由浅入深剖析Angular表单验证
Jul 14 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
Dec 20 Javascript
Vue AST源码解析第一篇
Jul 19 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
Aug 20 Javascript
Vue一次性简洁明了引入所有公共组件的方法
Nov 28 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
JQUERY设置IFRAME的SRC值的代码
Nov 30 #Javascript
juqery 学习之四 筛选过滤
Nov 30 #Javascript
juqery 学习之四 筛选查找
Nov 30 #Javascript
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
Nov 28 #Javascript
xss文件页面内容读取(解决)
Nov 28 #Javascript
用js来解决ajax读取页面乱码
Nov 28 #Javascript
window.name代替cookie的实现代码
Nov 28 #Javascript
You might like
用phpmyadmin更改mysql5.0登录密码
2008/03/25 PHP
PHP 源代码压缩小工具
2009/12/22 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
浅谈Vue.set实际上是什么
2019/10/17 Javascript
浅谈python多线程和队列管理shell程序
2015/08/04 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
python opencv摄像头的简单应用
2019/06/06 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
拆迁委托协议书
2014/09/15 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
圣诞节开幕词
2015/01/29 职场文书
辞职信标准格式
2015/02/27 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android