使用嵌套模板(NestedRepeater|NestedDataList)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

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

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()来查找子模板并赋数据源.

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航