使用嵌套模板(NestedRepeater|NestedDataList)

  上自己申请的留言薄看了一下,有人说非常漂亮,问是怎么做的,其实非常简单,无非就是三大操作,难点就在于如何实现取出对应留言的回复(其实也不算难),而解决这个可以用嵌套模板来实现,巧妙点地话,连这个都可以不用做.

  所谓嵌套模板就是在一个模板中加入另一个模板,如

  1 < asp:Repeater ID = " parent "  Runat = " server " >
 
2                  < ItemTemplate >
 
3                     编号: <% # DataBinder.Eval(Container.DataItem, " id " ) %>
 
4                     留言: <% # DataBinder.Eval(Container.DataItem, " content " ) %>
 
5                      < br >
 
6                      < asp:Repeater ID = " child "  Runat = " server " >
 
7                          < ItemTemplate >
 
8                             回复: <% # DataBinder.Eval(Container.DataItem, " reply " ) %>< br >
 
9                          </ ItemTemplate >
10                      </ asp:Repeater >
11                  </ ItemTemplate >
12              </ asp:Repeater >

在后置代码Load中写入(假设父模板为parent,子模板为child)

OleDbConnection con  =   new  OleDbConnection( @" ../gb.mdb " );
            OleDbDataAdapter da 
=   new  OleDbDataAdapter( " select * from guestbook " ,con);
            OleDbDataAdapter da2 
=   new  OleDbDataAdapter( " select * from reply " ,con);

            DataSet ds 
=   new  DataSet();
            da.Fill(ds,
" guestbook " );
            da2.Fill(ds,
" reply " );

            ds.Relations.Add(
" relation " ,ds.Tables[ 0 ].Columns[ " id " ],ds.Tables[ 1 ].Columns[ " id " ]);

            parent.DataSource 
=  ds.Tables[ 0 ].DefaultView;
            parent.DataBind();

            con.Close();

主要是为两个表之间添加关系,当前如果一个表就什么都不用做了.

接着写Repeater的 ItemDataBound 事件,这个很关键.

DataRowView dv  =  e.Item.DataItem  as  DataRowView;

            child 
=  e.Item.FindControl( " child " as  Repeater;
            child.DataSource  
=  dv.CreateChildView( " relation " );
            child.DataBind();

通过FindControl()来查找子模板并赋数据源.

上面的思路其实可以理解为两个表间的父子关系映射到嵌套模板上去.

随手写的代码,乱七八糟的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值