结合NBearDataSource实现嵌套Repeater

参考资源:
1. 在Repeater中嵌套使用Repeater
2. How To Display Hierarchical Data by Using Nested Repeater Controls and Visual C# .NET
3. 嵌套的Repeater
4. 在嵌套的repeater中加ItemDataBound事件
5. [CN.Text开发笔记]嵌套Repeater的问题
6. repeater中嵌套repeater(vs2005)
7. Repeater嵌套的两种方案
8. Scott Mitchell 的ASP.NET 2.0数据教程之三十二:: 数据控件的嵌套

最组效果图:
Nested_Repeater.jpg

方案一:每次绑定生成NBearDataSource,在ItemDataBound中设置NBearDataSource.Filter().
代码如下:
ContractedBlock.gif ExpandedBlockStart.gif 设计代码
ExpandedBlockStart.gifContractedBlock.gif<%dot.gif@ Register TagPrefix="nb" Namespace="NBear.Web.Data" Assembly="NBear.Web.Data" %>
None.gif
<nb:NBearDataSource ID="nbdsLinkCategorys" runat="server" ConnectionStringName="Access" 
None.gif        TypeName
="Entities.LinkCategory"></nb:NBearDataSource>
None.gif    
<asp:Repeater ID="rptLinkCategories" DataSourceID="nbdsLinkCategorys" runat="server" OnItemDataBound="rptLinkCategories_ItemDataBound">
None.gif        
<ItemTemplate>
None.gif        
<div class="box">
ExpandedBlockStart.gifContractedBlock.gif        
<h3><%dot.gif#Eval("Name"%></h3>
None.gif        
<ul><nb:NBearDataSource ID="nbdsLinks" runat="server" ConnectionStringName="Access"
None.gif        TypeName
="Entities.Link" />
None.gif            
<asp:Repeater ID="rptLinks" DataSourceID="nbdsLinks" runat="server">
None.gif                
<ItemTemplate>
None.gif                
<li>
None.gif                    
<href='<%#Eval("Src") %>
ExpandedBlockStart.gifContractedBlock.gif                            runat="server" title='
<%dot.gif#"点击查看 - " + Eval("Title"%>'><%dot.gif#Eval("Title"%></a>
None.gif                
</li>
None.gif                
</ItemTemplate>
None.gif            
</asp:Repeater>
None.gif        
</ul>
None.gif        
</div>
None.gif        
</ItemTemplate>
None.gif    
</asp:Repeater>

ContractedBlock.gif ExpandedBlockStart.gif 源代码
None.gifprotected void rptLinkCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            LinkCategory category 
= (LinkCategory)e.Item.DataItem;
InBlock.gif            NBearDataSource nbds 
= (NBearDataSource)e.Item.FindControl("nbdsLinks");
InBlock.gif            nbds.Filter(Link._.CategoryID 
== category.ID);
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

缺点:如果有N个Linkcategory,这个方法会访问数据库N+1次— 一次返回所有的Linkcategory,N次返回特定Linkcategory下的Links。

方案二:只需两次数据访问,一次获取全部的LinkCategories,一次获取全部的Links。

转载于:https://www.cnblogs.com/fengmk2/archive/2007/02/20/653082.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值