先看图:
这个功能可以用后台管理中(区域的绑定,商品大类,商品小类,商品信息的管理);
实现原理如下:
先建设一个数据表如:高校栏目表
截图如下:
ParentID保存父ID的节点,ChildID保存子ID的节点,
如果某一行中的ParentID不为空,子节点为空,说明此行为父节点;而子节点的ParentID对应相应的父节点。
前台代码
1 <div>
2 <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound" >
3 <HeaderTemplate>
4 <table>
5 <thead style="background-color:Silver">
6 <td width="50px">
7 操作</td>
8 <td width="100px">
9 名称</td>
10 <td >
11 时间</td>
12 </thead>
13 </HeaderTemplate>
14 <ItemTemplate>
15 <tr style="background-color:#cccccc">
16 <td align="left" width="50px">
17 <img src="expand.gif" onclick="expand('id1_<%#Eval("id") %>')" />
18 </td>
19 <td align="left" width="100px">
20 <%#Eval("Name") %>
21 </td>
22 <td align="left" width="100px">
23 <%#Eval("DataOf", "{0:yyyy-MM-dd}")%>
24 </td>
25 </tr>
26 <tr id="id1_<%#Eval("id") %>" style="display:none; background-color:InfoBackground" >
27 <td colspan="3">
28 <asp:DataList ID="DataList2" runat="server">
29 <ItemTemplate>
30 <tr>
31 <td align="left" width="50px">
32 <img src="collapse.gif" />
33 </td>
34 <td align="left" width="100px">
35 <%#Eval("Name") %>
36 </td>
37 <td align="left" width="100px">
38 <%#Eval("DataOf","{0:yyyy-MM-dd}") %>
39 </td>
40 </tr>
41 </ItemTemplate>
42 </asp:DataList>
43 </td>
44 </tr>
45 </ItemTemplate>
46 <FooterTemplate>
47 </table>
48 </FooterTemplate>
49 </asp:DataList>
50 </div>可以看到 用到了两个DataList数据控件,且用table布局(用DIV布局也可以);最主要的一点 可以看到 第二个<tr>标签中 设置其id="id1_<%#Eval("id")%>",这是因为符合条件的数据可能显示多行,只能给其起一个不同的名字作为id,为方便操作,所以就用这种方式。//js代码如下:function expand(a)
{if(document.getElementById(a).style.display=='none')
{document.getElementById(a).style.display='block';
}
else
{document.getElementById(a).style.display='none';
}
}
后台代码就很平常啦!,在OnItemDataBound事件中,做了对第二个datalist数据控件的绑定操作。
这个不会出现展开或折叠节点是,发生数据的回发。