資料結構
Table: Department
- DeptID (PK)
- DeptName
- ParentDeptID (FK, NULL 為根節點)
後端遞迴建構 JSON(Ligertree 格式)
public List GetDeptTree() {
var all = db.Departments.ToList(); // 一次讀取所有
var roots = all.Where(d => d.ParentDeptID == null).ToList();
return BuildTree(roots, all);
}
List BuildTree(List parents, List all) {
var nodes = new List();
foreach (var p in parents) {
var node = new TreeNode { id = p.DeptID, text = p.DeptName };
var children = all.Where(d => d.ParentDeptID == p.DeptID).ToList();
if (children.Any()) node.children = BuildTree(children, all);
nodes.Add(node);
}
return nodes;
}
// TreeNode 類別需符合 Ligertree 要求:id, text, children (List)
前端初始化
$("#tree").ligerTree({
data: <%= JsonSerializer.Serialize(Model.TreeData) %>, // 或 AJAX 取得
checkbox: false,
slide: true
});
效能提示
- 資料量 < 5000 筆,一次性載入遞迴構建最簡單。
- 大量資料採用 **延遲載入**:
onExpand 事件 AJAX 取得子節點。
- 確保
ParentDeptID 有索引,遞迴查詢才快。