看到园友发表了一篇关于JS树的文章,看了之后,觉得应该可以精简不少代码,
想到了以前做的项目里面用到了一个JS树,于是试着修改了一下,现把代码贴出来与大家共享,还请大家多扔砖头!
前端代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.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>
<link href="images/Tree/Tree.css" rel="stylesheet" type="text/css" />
<style type="text/css">
#tabMenu {
border: 1px solid #A3C0E8;
position: absolute;
opacity: 0.9;
display: none;
cursor: pointer;
border-collapse: collapse;
z-index:9999;
background-color:#fff;
}
#tabMenu td {
border: 1px solid #A3C0E8;
height: 30px;
width: 120px;
text-align: center;
}
.righText {
text-align:right;
width:120px;
height:30px;
}
#tabDepartment td {
border: 1px solid #A3C0E8;
}
</style>
<script src="js/jquery-1.11.1.js" type="text/javascript"></script>
<script src="js/Tree.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
reload();
var dt = document.getElementById("Tree");
dt.oncontextmenu = function() {
return false;
}
document.onclick = function() {
$("#tabMenu").css("display", "none");
}
$("#tabMenu").mouseleave(function() {
$(this).css("display", "none");
});
});
function reload() {
$.ajax({
type: 'POST',
url: "Default.aspx/GetData2",
data: "{ pid: 0 }",
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function(data) {
var obj = eval('(' + data.d + ')');
if (obj) {
var tree = new treeview("treeview", "/Images/Tree", false, false);
var dt = document.getElementById("Tree");
dt.innerHTML = "";
loopNode(obj, tree);
tree.create(dt);
tree.nodes.items[0].expand();
}
},
error: function(r, ex) {
}
});
}
function stopBubble(e) {
if (e && e.stopPropagation)
e.stopPropagation();
else
window.event.cancelBubble = true;
return false;
}
function loopNode(obj, parNode) {
var nd = new node(obj.Name, obj.Name, "", obj.PID, obj.ID, false);
parNode.add(nd);
var len = obj.Child.length;
if (len > 0) {
for (var i = 0; i < len; i++) {
var d = obj.Child[i];
if (d.Child && d.Child.length > 0) {
loopNode(d, nd)
}
else {
nd.add(new node(d.Name, d.Name, "", d.PID, d.ID, false));
}
}
}
}
treeview.prototype.oncontextmenu = function(sender, e) {
selectedNode = sender;
var ps = sender.position(e);
$("#tabMenu").css({ left: ps.x, top: ps.y, display: 'block' });
return stopBubble(e);
}
treeview.prototype.onnodeclick = function(sender) {
selectedNode = sender;
return false;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="Tree">
</div>
<table id="tabMenu" border="1">
<tr>
<td>添加</td>
</tr>
<tr>
<td>修改</td>
</tr>
<tr>
<td>删除</td>
</tr>
</table>
</form>
</body>
</html>
后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Text;
using Utility;
using Newtonsoft.Json;
namespace WebApplication1
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static string GetData2(int pid)
{
StringBuilder sb = new StringBuilder();
List<HRDepartmentEntity> alist = Getlist();
List<HRDepartmentEntity> clist = alist.FindAll(p => p.ParentID == pid).OrderBy(q => q.DepartmentOrder).ToList();
LoopDepartment(alist, clist, sb, pid);
return sb.ToString();
}
[WebMethod]
public static string GetData(int pid)
{
StringBuilder sb = new StringBuilder();
List<HRDepartmentEntity> alist = Getlist();
DepartmentSingle ds = new DepartmentSingle();
ds.Name = "Test";
LoopDepartment2(alist, ds);
string str = JsonConvert.SerializeObject(ds);
return str;
}
/// <summary>
/// 得到组织架构列表
/// </summary>
/// <returns></returns>
private static List<HRDepartmentEntity> Getlist()
{
return SQLServerHelper.ExecuteDataTable("select * from HR_Department").ToList<HRDepartmentEntity>();
}
private static void LoopDepartment2(List<HRDepartmentEntity> list1, DepartmentSingle ds)
{
List<HRDepartmentEntity> list2 = list1.FindAll(p => p.ParentID == ds.ID).OrderBy(q => q.DepartmentOrder).ToList();
if (list2.Count > 0)
{
ds.Child = list2.ConvertAll<DepartmentSingle>(p => new DepartmentSingle { ID = p.DepartmentID, PID = p.ParentID, Name = p.DepartmentName });
foreach (DepartmentSingle ds2 in ds.Child)
{
LoopDepartment2(list1, ds2);
}
}
}
private static void LoopDepartment(List<HRDepartmentEntity> alist, List<HRDepartmentEntity> clist, StringBuilder sb, int pid)
{
for (int i = 0; i < clist.Count; i++)
{
HRDepartmentEntity entity = clist[i];
int id = entity.DepartmentID;
List<HRDepartmentEntity> list2 = alist.FindAll(p => p.ParentID == id).OrderBy(q => q.DepartmentOrder).ToList();
sb.Append("{" + string.Format("ID:{0},PID:{1},Name:'{2}',Order:{3},Child:", id, entity.ParentID, entity.DepartmentName, entity.DepartmentOrder) + "[");
if (list2.Count > 0)
{
LoopDepartment(alist, list2, sb, id);
}
if (i < clist.Count - 1)
{
sb.Append("]},");
}
else
{
sb.Append("]}");
}
}
}
}
/// <summary>
/// 组织架构实体类
/// </summary>
public class HRDepartmentEntity
{
#region 私有变量
private Int32 m_DepartmentID;
private String m_DepartmentName;
private Int32 m_ParentID;
private String m_ParentName;
private String m_DepartmentIcon;
private String m_ResponsiblePerson;
private String m_Tel;
private String m_Email;
private String m_Description;
private Int32 m_DepartmentOrder;
private Int32 m_IsDelete;
private DateTime m_DeleteTime;
#endregion
# region 属性方法
public Int32 DepartmentID
{
get { return m_DepartmentID; }
set { m_DepartmentID = value; }
}
public String DepartmentName
{
get
{
return m_DepartmentName;
}
set { m_DepartmentName = value; }
}
public Int32 ParentID
{
get { return m_ParentID; }
set { m_ParentID = value; }
}
public String ParentName
{
get
{
return m_ParentName;
}
set { m_ParentName = value; }
}
public String DepartmentIcon
{
get
{
return m_DepartmentIcon;
}
set { m_DepartmentIcon = value; }
}
public String ResponsiblePerson
{
get
{
return m_ResponsiblePerson;
}
set { m_ResponsiblePerson = value; }
}
public String Tel
{
get
{
return m_Tel;
}
set { m_Tel = value; }
}
public String Email
{
get
{
return m_Email;
}
set { m_Email = value; }
}
public String Description
{
get
{
return m_Description;
}
set { m_Description = value; }
}
public Int32 DepartmentOrder
{
get
{
return m_DepartmentOrder;
}
set { m_DepartmentOrder = value; }
}
public Int32 IsDelete
{
get
{
return m_IsDelete;
}
set { m_IsDelete = value; }
}
public DateTime DeleteTime
{
get
{
return m_DeleteTime;
}
set { m_DeleteTime = value; }
}
#endregion
}
public class DepartmentSingle
{
public int ID;
public int PID;
public string Name;
public List<DepartmentSingle> Child;
}
}
ok了~~就这些,完整源代码下载
每天进步一点点...