最近好忙,好长时间没有更新博客了..........

先看效果图:

此控件利用了 JQuery 插件: treeview

google直接搜索就可以找到,这里就不提供链接了.

下载下来的压缩包包括了源码和一个demo.上面这个效果图其实就是Demo里的一个例子.从前台看上去真看不出它是个Tree.因为我们前天看到的只不过都是些<ul><li></li></ul>,显然 treeview.js 插件里实现了很多功能.

而我们今天要做的就是不关心 treeview.js 是怎么实现的.而是一心把数据库里我们的分类调出来,然后用C#处理逻辑,最后显示在一个aspx页面.

先看数据库分类表:

在表里 ParentID 记录的是父类的 ID. 顶级父类(没有它的父类)的ParentID 我用-1表示,也可以是0,也可以是NULL.

C#从数据库中读取数据就不多说了.

只说明俩点:

1.把所有的数据读取到一个 DataTable 中.

2.把所有数据的ParentID(除去顶级父类的ParentID) 读取到一个list<string> 中(这里没有用list<int>).

下面开始C#部分:

//构造一个TreeView 这里只遍历ParentID不存在的项(即:顶级父类)
        protected string CreateTreeView()
        {
            StringBuilder srb = new StringBuilder();
            if (dt != null && dt.Rows.Count > 0)
            {
                foreach (DataRow item in dt.Rows)
                {
                    if (!list.Contains(item["ParentID"].ToString()))//并不是所有的都遍历,而是只遍历不存在父ID 的那几项
                    {
                        srb.AppendFormat("<li><span id=\"{0}\" name=\"tree\">{1}</span>", item["ID"].ToString(), item["ProductName"].ToString());
                        if (IsParent(item["ID"].ToString()))
                        {
                            srb.Append(CreateChildTree(item["ID"].ToString()));
                        }
                        srb.Append("</li>");
                    }
                }
            }
           
            return srb.ToString();
        }

蓝色的部分是一个判断函数,判断当前数据的ID是不是在 list<string> 中.如果是,将一直往下执行到红色的函数.

//检查此ID是否在父ID集合中
        private bool IsParent(string ID)
        {
            bool P = false;
            if (list != null && list.Count > 0)
            {
                if (list.Contains(ID))
                {
                    P = true;
                }
            }
            return P;
        }

红色的函数是一个递归函数,

//根据父id找到对应的所有之类 返回字符串
        private string CreateChildTree(string ID)
        {
            StringBuilder childStr = new StringBuilder();
            if (dt != null && dt.Rows.Count > 0)
            {
                childStr.Append("<ul>");
                foreach (DataRow item in dt.Rows)
                {
                    if (item["ParentID"].ToString() == ID)
                    {
                        childStr.AppendFormat("<li><span id=\"{0}\" name=\"tree\">{1}</span>", item["ID"].ToString(), item["ProductName"].ToString());
                        if (IsParent(item["ID"].ToString()))
                        {
                            childStr.Append(CreateChildTree(item["ID"].ToString()));//执行递归
                        }
                        childStr.Append("</li>");
                    }
                }
                childStr.Append("</ul>");
            }
            return childStr.ToString();
        }

红色的节点将一直递归当前节点的子节点,直到遍历完为止. 然后返回构造的字符串.

最后由:CreateTreeView()函数把字符串写入到aspx页面.这样就ok了.

JQuery,C#,sqlServer 实现无极限多级树形控件的更多相关文章

  1. 基于jquery的可查询多级select控件(可记录历史选择)

    一.功能和使用 公司有功能需求,还要一条代码引入的控件,网上找完全符合的控件比较难,寻找所花的时间还不如自己写一个,所以找个空闲时间自己写了一个   控件功能:1.可手动输入查询,也可点击下拉框查询, ...

  2. 基于Bootstrap的JQuery TreeView树形控件,数据支持json字符串、list集合(MVC5)<二>

    上篇博客给大家介绍了基于Bootstrap的JQuery TreeView树形控件,数据支持json字符串.list集合(MVC5)<一>, 其中的两种方式都显得有些冗余.接着上篇博客继续 ...

  3. jQuery树形控件zTree使用小结

    作者:Fonour 字体:[增加 减小] 类型:转载 时间:2016-08-02我要评论 这篇文章主要为大家详细介绍了jQuery树形控件zTree使用方法,zTree树插件的基本使用方法,感兴趣的小 ...

  4. jQuery树形控件zTree使用

    http://www.cnblogs.com/AutumnRhyme/p/5915769.html .................................................. ...

  5. Jquery树形控件 $.fn.zTree.init

    https://www.cnblogs.com/jin-/p/4646202.html asp.net 树形控件 $.fn.zTree.init 在网页中通过jquery脚本来构筑树形控件将是一个不错 ...

  6. Web应用程序开发,基于Ajax技术的JavaScript树形控件

    感谢http://www.cnblogs.com/dgrew/p/3181769.html#undefined 在Web应用程序开发领域,基于Ajax技术的JavaScript树形控件已经被广泛使用, ...

  7. js树形控件—zTree使用总结

    0 zTree简介 树形控件的使用是应用开发过程中必不可少的.zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 0.0 ...

  8. jasonTree多选多级树控件

    jasonTree1.0 jasonTree多选多级树控件(名字是自己取),用于友好的展示树形结构的数据,并可以多选,传统的做法是在一个select的下拉框中显示一个可折叠的树结构,公司的需求人员这种 ...

  9. Android 打造任意层级树形控件 考验你的数据结构和设计

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40212367,本文出自:[张鸿洋的博客] 1.概述 大家在项目中或多或少的可能会 ...

随机推荐

  1. 窥探Swift之类的继承与类的访问权限

    上一篇博客<窥探Swift之别具一格的Struct和Class>的博客可谓是给Swift中的类开了个头.关于类的内容还有很多,今天就来搞一下类中的继承以及类的访问权限.说到类的继承,接触过 ...

  2. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

  3. Linux异常表

    一.为什么需要异常表? 处于内核态的程序有下面四种情况会产生缺页异常: 1.内核试图访问属于进程地址空间的页,但是,该页对应的页框不存在或者内核试图去访问一个只读的页,分别对应“请求调页”和“写时复制 ...

  4. Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)

    原来写了篇文章讲UITabBarController的用法,当时是从UIViewController跳转到UITabBarController页面,代码如下: 1 self.presentViewCo ...

  5. 相克军_Oracle体系_随堂笔记002-基础

    1.常见的Oracle生产库环境: 图2-1可以说是标准的生产库环境,处处体现了冗余,有效防止了单点故障.这就是HA(高可用) 而且冗在某种条件下还可以去掉,平常实现同时运行提供服务,如果一台坏掉,另 ...

  6. Service实现文件下载

    首先在Activity中声明Intent对象,启动Service: //生成Intent对象 Intent intent = new Intent(); //将文件名对象存入到intent对象当中 i ...

  7. SQL SERVER四舍五入你除了用ROUND还有其他方法吗?

    引言 今天和测试沟通一个百分比计算方式时遇到一个问题, 我在存储过程里用到了强转CAST(32.678 AS DECIMAL(5,1))  我认为该方式只会保留一位小数,我给测试的回复是我并没有用到四 ...

  8. js构建ui的统一异常处理方案(一)

    从早期从事基于java的服务器端开发,再到之后从事基于web和js的ui开发,总体感觉基于web页面的ui开发远不如服务器端健壮.主要是早期ie浏览器功能太弱小,很多业务被迫放到服务器端去实现,浏览器 ...

  9. 理解领域模型Domain Model

    定义 业务对象模型(也叫领域模型 domain model)是描述业务用例实现的对象模型.它是对业务角色和业务实体之间应该如何联系和协作以执行业务的一种抽象.业务对象模型从业务角色内部的观点定义了业务 ...

  10. mybatis入门基础(三)----SqlMapConfig.xml全局配置文件解析

    一:SqlMapConfig.xml配置文件的内容和配置顺序如下 properties(属性) settings(全局配置参数) typeAiases(类型别名) typeHandlers(类型处理器 ...