zoukankan      html  css  js  c++  java
  • 实现树形结构

    1、数据库结构

    环境:mysql + vs2010 + mvc4.5

    /*
    Navicat MySQL Data Transfer
    
    Source Server         : localhost
    Source Server Version : 50614
    Source Host           : localhost:3306
    Source Database       : amydb
    
    Target Server Type    : MYSQL
    Target Server Version : 50614
    File Encoding         : 65001
    
    Date: 2014-07-04 14:04:49
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for `tb_tree`
    -- ----------------------------
    DROP TABLE IF EXISTS `tb_tree`;
    CREATE TABLE `tb_tree` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(100) NOT NULL DEFAULT '',
      `pid` int(11) DEFAULT NULL,
      `level` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of tb_tree
    -- ----------------------------
    INSERT INTO `tb_tree` VALUES ('1', '书籍', null, '0');
    INSERT INTO `tb_tree` VALUES ('2', '日常用品', null, '0');
    INSERT INTO `tb_tree` VALUES ('3', '牙膏', '2', '1');
    INSERT INTO `tb_tree` VALUES ('4', '牙刷', '2', '1');
    INSERT INTO `tb_tree` VALUES ('5', '操作系统', '1', '1');
    INSERT INTO `tb_tree` VALUES ('6', '学科类型', null, '0');
    INSERT INTO `tb_tree` VALUES ('7', '自然学科', '6', '1');
    INSERT INTO `tb_tree` VALUES ('8', '操作系统原理', '5', '2');
    INSERT INTO `tb_tree` VALUES ('9', 'Linux操作系统', '5', '2');
    INSERT INTO `tb_tree` VALUES ('10', 'windows操作系统', '5', '2');

    2、获取数据

     public List<MTree> QueryAllTree(IDbConnection conn, IDbTransaction trans)
            {
                List<MTree> list = new List<MTree>();
                string str = @"
                             SELECT id, name, pid, level
                             FROM tb_tree
                            ";
    
                using (MySqlDataReader reader = MySqlHelper.ExecuteReader(conn.ConnectionString, str))
                {
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            MTree model = new MTree();
                            model.ID = Convert.ToInt32(reader["id"].ToString());
                            model.Name = reader["name"] == DBNull.Value ? string.Empty : reader["name"].ToString();
                            model.PID = reader["pid"] == DBNull.Value ? 0 : Convert.ToInt32(reader["pid"].ToString());
                            model.Level = reader["level"] == DBNull.Value ? 0 : Convert.ToInt32(reader["level"].ToString());
                            list.Add(model);
                        }
                    }
                }
    
                return list;
            }

    3、前台显示 

     @model List<Better.Amy.IDao.MTree> 
    @{
        ViewBag.Title = "DynamicTree";
    }
    
    <script src="~/javascript/jquery-1.7.2.min.js"></script>
    <script src="~/javascript/DynamicTree.js"></script>
    <style type="text/css">
        a
        {
            30px;
        }
    
    </style>
    
    <h2>树</h2>
    <div id="content">
        <div id="left" style ="float:left;overflow:auto;min-600px;">
            @if(Model!= null && Model.Count > 0){
                List<Better.Amy.IDao.MTree> level0 = Model.FindAll(p => p.Level == 0);
                foreach(var item in level0)
                {
                    <a id="@item.ID" href="javascript:void(0);">@item.Name</a><br />
                    List<Better.Amy.IDao.MTree> level1 = Model.FindAll(p => p.Level == 1 && p.PID == item.ID);
                    if (level1 != null && level1.Count > 0)
                    {
                        <div class='@item.ID' style="display:none;margin-left:20px;">
                        @foreach (var j in level1)
                        {
                            <a id ="@j.ID" href="javascript:void(0);">@j.Name</a><br />
                            
                            List<Better.Amy.IDao.MTree> level2 = Model.FindAll(p => p.Level == 2 && p.PID == j.ID);
                            if (level2.Count > 0){
                            <div class="@j.ID" style="display:none; margin-left:35px;">
                               @foreach(var k in level2)
                               {
                                    <a id="@k.ID" href="javascript:void(0);">@k.Name</a> <br />
                               }
    
                            </div>
                        }
                        }
                        </div>
                    }
                    }
                }
        </div>
        <div id="right" style="float:right; overflow:auto;"></div>
        <div style="clear:both;"></div>
    </div>

    4、js控制

    (function (window) {
        $(function () {
            $('a').click(function () {
                var id = $(this).attr('id');
                if ($('.' + id).is(":hidden")) {
                    $('.' + id).show();
                } else {
                    $('.' + id).hide();
                }
            });
        });
    })(window)

    5、运行结果

     

    作者:BestNow
    出处:http://www.cnblogs.com/BestNow/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    说说那些低级错误
    vue双向数据绑定
    妙用$.extend
    写一个限制执行次数的函数
    强类型语言不好的地方,比如这样:
    form表单里的坑
    Java Day 09
    Java Day 08
    Java Day 07
    Java Day 06
  • 原文地址:https://www.cnblogs.com/tianxue/p/3829049.html
Copyright © 2011-2022 走看看