DataList的嵌套对父子表十分有用
先建一对父子表
create table father
(
id int(4) primary key,
name nvarchar(10)
)
create table son
(
id int(4) primary key,
fatherid int(4) forgein key father(id),
name nvarchar(10)
)
然后拖放一个datalist控件到页面上,绑定好数据源,就是father表,在ItemTemplate中加入另一个嵌套的datalist
1
<form id="form1" runat="server">
2
<div>
3
<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" DataKeyField="id" OnItemDataBound="DataList1_ItemDataBound">
4
<ItemTemplate>
5
6
name:
7
<asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'></asp:Label><br />
8
<asp:DataList ID="DataList2" runat="server" DataSourceID="SqlDataSource2" OnItemCommand="DataList2_ItemCommand">
9
<ItemTemplate>
10
11
name:
12
<asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'></asp:Label><br />
13
14
<br />
15
</ItemTemplate>
16
</asp:DataList><asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
17
SelectCommand="SELECT [fatherid], [name], [id] FROM [son] WHERE ([fatherid] = @fatherid)">
18
<SelectParameters>
19
<asp:Parameter Name="fatherid" Type="Int32" />
20
</SelectParameters>
21
</asp:SqlDataSource>
22
<br />
23
<br />
24
</ItemTemplate>
25
</asp:DataList><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
26
SelectCommand="SELECT [id], [name] FROM [father]"></asp:SqlDataSource>
27
</div>
28
</form>
<form id="form1" runat="server">2
<div>3
<asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1" DataKeyField="id" OnItemDataBound="DataList1_ItemDataBound">4
<ItemTemplate>5
6
name:7
<asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'></asp:Label><br />8
<asp:DataList ID="DataList2" runat="server" DataSourceID="SqlDataSource2" OnItemCommand="DataList2_ItemCommand">9
<ItemTemplate>10
11
name:12
<asp:Label ID="nameLabel" runat="server" Text='<%# Eval("name") %>'></asp:Label><br />13
14
<br />15
</ItemTemplate>16
</asp:DataList><asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"17
SelectCommand="SELECT [fatherid], [name], [id] FROM [son] WHERE ([fatherid] = @fatherid)">18
<SelectParameters>19
<asp:Parameter Name="fatherid" Type="Int32" />20
</SelectParameters>21
</asp:SqlDataSource>22
<br />23
<br />24
</ItemTemplate>25
</asp:DataList><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"26
SelectCommand="SELECT [id], [name] FROM [father]"></asp:SqlDataSource>27
</div>28
</form>加入后的html如上所示.
在外面的datalist中找到Item_DataBound事件双击
在里面写上如下代码:
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
SqlDataSource sds = (SqlDataSource)e.Item.FindControl("SqlDataSource2");
sds.SelectParameters["fatherid"].DefaultValue = DataList1.DataKeys[e.Item.ItemIndex].ToString();
}

浙公网安备 33010602011771号