程序人生

人生如戏!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DataList的嵌套应用

Posted on 2007-04-12 22:36  NEOSHENG  阅读(1730)  评论(3)    收藏  举报

DataList的嵌套对父子表十分有用

先建一对父子表

create table father
(
   id 
int(4primary key,
   name 
nvarchar(10)
)
create table son
(
   id 
int(4primary 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                &nbsp;<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();
        }
ok,已经可以实现datalist的嵌套了.