效果图
准备步骤:
具体使用的Dome可以在这个位置下载
1.引入jquery.treeTable.js和jquery.treeTable.css
前台代码如下:
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link href="/resources/js/treeTable/vsStyle/jquery.treeTable.css" rel="stylesheet" type="text/css" />
<style type="text/css">
table, td, th {
border: 1px solid #8DB9DB;
padding: 5px;
border-collapse: collapse;
font-size: 16px;
}
</style>
<script src="/resources/js/jquery-1.7.2.min.js" type="text/javascript"> </script>
<script src="/resources/js/treeTable/jquery.treeTable.js" type="text/javascript"> </script>
<script type="text/javascript">
$(function () {
var option = {
theme: 'vsStyle',
expandLevel: 2,
beforeExpand: function ($treeTable, id) {
//判断id是否已经有了孩子节点,如果有了就不再加载,这样就可以起到缓存的作用
if ($('.' + id, $treeTable).length) { return; }
//这里的html可以是ajax请求
//var html = '<tr id="8" pId="6"><td>员工伙食费</td><td>5000</td><td>1000</td></tr>'
$treeTable.addChilds(html);
},
onSelect: function ($treeTable, id) {
window.console && console.log('onSelect:' + id);
}
};
$('#treeTable1').treeTable(option);
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<table id="treeTable1" style="width: 100%">
<asp:Repeater ID="Repeater1" runat="server" >
<HeaderTemplate>
<tr>
<td style="width: 200px;">收支项目</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr id="<%#Eval("pid") %>" pid="<%#Eval("fatherid") %>">
<td><%#Eval("Categories") %></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
</form>
</body>
</html>
后台代码:
DataTable dt = new DataTable();
dt.Columns.Add("pid");
dt.Columns.Add("fatherid");
dt.Columns.Add("Categories");
dt.Columns.Add("Month");
dt.Columns.Add("Year");
this.Repeater1.DataSource = dt;
this.Repeater1.DataBind();
细心的朋友会发现,多级数据,在数据库是没有按照上下级排序好的,但是这个控件需要按照上下级排序正确后,才能正常显示,所以要补充一个数据库排序的代码
with cte(SortID,CategoryID,CategoryName,ParentID)
as
(
select cast(row_number() over(order by CategoryID) as varchar(10)) SortID,CategoryID,CategoryName,ParentID from
Category where ParentID=0 and CompanyID=@CompanyID AND Type=4
union all
select cast(SortID+cast(row_number() over(order by a.CategoryID)as varchar(10)) as varchar(10)),a.CategoryID,a.CategoryName,a.ParentID
from Category a join cte
on cte.CategoryID=a.ParentID
)
select CategoryID,CategoryName,ParentID from cte order by SortID