实现树形结构
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 { width:30px; } </style> <h2>树</h2> <div id="content"> <div id="left" style ="float:left;overflow:auto;min-width: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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/BestNow/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?