树型菜单数据项AJAX实现增删改查
来源:互联网 发布:sql developer配置错误 编辑:程序博客网 时间:2024/06/16 04:41
首先请查一下最终的效果:
实现的思路很简单,即首构建一个JSON数据,这里已经通过后台排好序并且已做好了父子关系,然后通过QUI列表控件显示出来,也可以直接用HTML显示,代码如下:
<!--框架必需start--><script type="text/javascript" charset="utf-8" src="@Url.Content("~/libs/js/language/cn.js")"></script><script type="text/javascript" charset="utf-8" src="@Url.Content("~/libs/js/framework.js")"></script><link href="@Url.Content("~/libs/css/import_basic.css")" rel="stylesheet" type="text/css" /><link rel="stylesheet" type="text/css" id="skin" /><!--框架必需end--><!--数据表格start--><script type="text/javascript" charset="utf-8" src="@Url.Content("~/libs/js/table/quiGrid.js")"></script><!--数据表格end--><script type="text/javascript" src="@Url.Content("~/libs/js/popup/dialog.js")"></script><link href="@Url.Content("~/libs/skins/blue/style.css")" rel="stylesheet" type="text/css" id="theme" themecolor="green" positiontarget="positionContent" /><div class="main"> <ul class="mainMenu" id="mainMenu"> <li class="func"><i></i><a href="@Url.Action("Index", "Fun")">功能库</a></li> <li class="app"><i></i><a href="@Url.Action("Index", "App")">应用库</a></li> <li class="active set"><i></i><a href="@Url.Action("Index", "Cls")">应用分类维护</a></li> </ul> <div class="content"> <!-- end leftTree --> <div class="rightCon" style="width: 980px;"> <div class="rightCon-tit"> <h1>应用分类维护</h1> </div> <div class="maintain"> <div class="search"> <div> @* <label for="" class="ml20">菜单名称:</label><input type="text" class="input mr20" style="width: 200px;height: 35px;"> <input type="button" class="btn" value="查 询"> <input type="button" class="btn" value="重 置">*@ <input type="button" class="btn add" value="添加一级分类" style="margin-left: 20px;" onclick="onAdd(0, -1);"> </div> <div class="buttons"> </div> </div> <div class="m-container"> <div id="maingrid"></div> </div> </div> <!-- end maintain --> </div> <!-- end rightCon --> </div> <!-- end content --></div><script type="text/javascript"> var g; function initComplete() { g = $("#maingrid").quiGrid({ columns: [ { display: '分类名称', name: 'ClsName', id: 'ClsId', width: 400, align: 'left' }, { display: '创建时间', name: 'CreateTime', width: 250, align: 'center' }, { display: '操作', isAllowHide: false, align: 'center', width: "250", render: function (rowdata, rowindex, value, column) { var str = '<div class="padding_left5"><span class="icon_add hand" title="新增子级" onclick=onAdd("' + rowdata.ClsId + '","' + rowdata.ClsDepth + '","' + rowindex + '")>新增子级</span> '; if (rowdata.id != -1 && rowdata.id != 0) { str += '<span class="icon_edit hand" title="修改" onclick=onEdit("' + rowdata.ClsId + '","' + rowdata.ClsName + '","' + rowindex + '")>修改</span> ' str += '<span class="icon_delete hand" title="删除" onclick=onDelete("' + rowdata.ClsId + '","' + rowindex + '")>删除</span> ' } str += '</div>'; return str; } } ], data: {@Html.Raw(ViewBag.TreeData) }, height: '450', width: "100%", headerRowHeight: '40', rowHeight: '33', checkbox: false, usePager: false, autoCheckChildren: false, tree: { columnId: 'ClsId' } }); } var rowindexs; /*新增*/ function onAdd(id, depth, rowindex) { if (depth > 2) { alert('最多只能添加三级分类'); return; } rowindexs = rowindex; top.Dialog.open({ URL: "@Url.Action("Info", "Cls")" + "?clsId=" + id + "&type=add&userid=@ViewBag.UserId&clsName=", Title: "新增分类", Width: 450, Height: 200 }); } /*修改*/ function onEdit(id, clsName, rowindex) { rowindexs = rowindex; top.Dialog.open({ URL: "@Url.Action("Info", "Cls")" + "?clsId=" + id + "&type=edit&userid=@ViewBag.UserId&clsName=" + clsName, Title: "修改分类", Width: 450, Height: 200 }); } /*删除*/ function onDelete(id, rowindex) { if (confirm("您确定要删除选中的分类吗?")) { $.post("@Url.Action("Del", "Cls")", { clsId: id }, function (data) { if (data.toString() == "-1") { alert("该分类已被关联或使用,无法执行删除操作!"); } else if (data.toString() == "-2") { alert("该分类下还有子级分类,请先删除!"); } else if (data.toString() == "1") { alert("操作成功!"); deleteGridRow(rowindex); } else { alert("操作失败,请与管理员联系!"); } }, "text"); } } function deleteGridRow(rowindexs) { var row = g.getRow(rowindexs); var parent = g.getParent(row); var sister = g.getChildren(g.getParent(row)); g.deleteRow(row); if (sister.length == 1) { parent.isParent = false; parent._hasChildren = false; parent.iconClass = "icon_star"; parent.open = false; } g.reRender(g.records); } function addOrUpdateRow(type, clsId, clsName, parentId, createTime) { var row = g.getRow(rowindexs); var childs = g.getChildren(row); var sister = g.getChildren(g.getParent(row)); if (type == "add") { //新增并且展开 或者 新增下面无子节点 //设置父级的相关属性 row.isParent = true; row._hasChildren = true; row.open = true; row.iconClass = "icon_star"; //获取位置 var child = null; var isdown = false; //根据参数获得一个rowdate var rowData = { ClsId: clsId, ClsName: clsName, CreateTime: createTime, ClsParentId: parentId, iconClass: "icon_star" } //将rowdate新增进g g.appendRow(rowData, row, child, true); //如果是最大数字 g.expand(row); } else if (type == "edit") { //修改 ClsId = clsId, ClsName = clsName, CreateTime = createTime, ClsParentId = parentId, g.reRender(g.records); } //重新渲染 } function refershList() { }</script>
后台构建树型菜单JSON数据代码如下:
public ActionResult Index() { ViewBag.TreeData = GetAppClsList(); ViewBag.UserId = ""; return View(); }public String GetAppClsList() { List<D_AppCls> List = _clsBll.GetAppClsList(); string data = JsonHelper.ConvertToJson(List).Replace("\"", "\""); string json = String.Format("\"{0}\":{1}", "rows", data); return json; }/// <summary> /// 转换JSON对象集合,包含子集,递归加载 /// </summary> /// <param name="companyList"></param> /// <returns></returns> public static string ConvertToJson(List<D_AppCls> companyList) { string json = "["; //获取第一级目录 List<D_AppCls> rootList = companyList.Where(x => x.ClsParentId==0).ToList<D_AppCls>(); foreach (D_AppCls root in rootList) { string js = ConvertToJson(root); string children = ""; children = DiGui(companyList, children, root.ClsId); json += "{" + string.Format(js, children) + "},"; } if (json.LastIndexOf(",") < 1) { json += "]"; } else { json = json.Substring(0, json.Length - 1) + "]"; } return json.Replace(",children:[]", null); } /// <summary> /// 递归调用添加包含子集的JSON数组 /// </summary> private static string DiGui(List<D_AppCls> companyList, string children, int pid) { children = "["; List<D_AppCls> childerList = companyList.Where(x => x.ClsParentId == pid).ToList<D_AppCls>(); foreach (D_AppCls item in childerList) { string js = ConvertToJson(item); string cd = ""; cd = DiGui(companyList, cd, item.ClsId); children += "{" + string.Format(js, cd) + "},"; } if (children.LastIndexOf(",") < 1) { children += "]"; } else { children = children.Substring(0, children.Length - 1) + "]"; } return children; }
当然还有其它各种实现方法,如直接指定父子项的字段,交给前端UI来处理层级关系(ztree控件),但这种方式更为灵活,可以指定多列数据属性的显示,还可以控制菜单项的状态等,留给我们更多的开发和定制余地。
0 0
- 树型菜单数据项AJAX实现增删改查
- ajax 增删改查实现
- Ext 树型菜单(增删改查)
- Android本地数据库增删改查 菜单实现
- jqery easyui 利用treeview实现菜单的增删改查
- tapestry中实现ajax的增删改查实例
- ajax实现增删改查的一个实例
- 【笔记】c3p0+dbUtils+Ajax+Json实现【增删改查】Demo
- 实现二叉树增删改查
- xml实现增删查改
- web增删改查实现
- JDBC 实现增删改查
- MVC实现增删查改
- HQL实现增删改查
- ibatis实现增删改查
- javaScript实现增删改查
- JS实现增删改查
- Mybatis-实现增删改查
- 编译Android程序
- nmap原理及使用方法
- Prototype pattern (Python recipe)
- HTTPS 前端劫持
- java中object常用方法
- 树型菜单数据项AJAX实现增删改查
- 【Selenium学习笔记】webdriver对鼠标的操作
- 如何让你的Android SDK下载或者升级快如闪电
- C中的位域与大小端问题
- PRML1-引言
- C函数的模拟重载实现说明
- [leetcode] 230.Kth Smallest Element in a BST
- 黑马程序员——OC—OC中面向对象的特性之封装
- 自定义属性时TypedArray的使用方法