repeater 控件 获取索引列的值

 

前台页面部分:
  <asp:Repeater   id= "rptCategories "   runat= "server "   OnItemDataBound= "rptCategories_ItemDataBound ">    
        <HeaderTemplate>    
              <table   width= "100% "   border= "0 "   cellspacing= "0 "   cellpadding= "0 ">    
        </HeaderTemplate>    
        <ItemTemplate>    
              <!--分类名称-->    
              <tr>  <th>  <%#   DataBinder.Eval(Container.DataItem,    "TypeName ")   %>  </th>  </tr>    
              <!--分类下的产品-->    
              <asp:Repeater   id= "rptProduct "   runat= "server ">    
                    <ItemTemplate>    
                          <tr>  <td>  <a   href=ProductInfo.aspx?Id= <%#   DataBinder.Eval(Container.DataItem,    "ID ")   %> >  <%#   DataBinder.Eval(Container.DataItem,    "ProductName ")   %>  </a>  </td>  </tr>    
                    </ItemTemplate>    
              </asp:Repeater>    
        </ItemTemplate>    
        <FooterTemplate>    
              </table>    
        </FooterTemplate>    
  </asp:Repeater>    
 
后台代码部分(部分代码):   
//在绑定分类品名时,绑定分类下的产品   
private   void   rptCategories_ItemDataBound(object   sender,   System.Web.UI.WebControls.RepeaterItemEventArgs   e)   
{   
             BLL.Products   products   =new   BLL.Products();   
             if   (e.Item.ItemType   ==   ListItemType.Item   ||            e.Item.ItemType   ==   ListItemType.AlternatingItem)      
             {   
                         Repeater   rptProduct   =   (Repeater)   e.Item.FindControl( "rptProduct ");   
                         //找到分类Repeater关联的数据项   
                         DataRowView   rowv   =   (DataRowView)e.Item.DataItem;   
                         //提取分类ID   
                         int   CategorieId   =   Convert.ToInt32(rowv[ "ID "]);   
                         //根据分类ID查询该分类下的产品,并绑定产品Repeater   
                         rptProduct.DataSource   =   products.GetProductsByCategorieId(CategorieId);   
                         rptProduct.DataBind();   
             }   
}   
注意:其中   第2层的   OnItemDataBound= "rptCategories_ItemDataBound "   是重要部分,因为里层的repeater   web里是认识不到的,只有在这指明了事件处理方法,才能触发后台程序里的方法。类似的也可以用这种方法多层嵌套,并能处理里面的事件。第二点在   aspx   指明事件的在后台程序,需要protected   来限定访问限制,如用private   就会出现限制访问的错误提示。
 
前几天我在外面一个业务里曾经遇到这个问题,并且吃了很大的亏,这方面的资料其实在网上是很多的,随便上baidu都可以找到,关键是理解它的思路就行了,这其实也不难。但在处理这个问题时,我的Repeater控件在别的地方出问题了,怎么调试,结果也不对,后来仔细一看   ,原来我的Repeater控件的首尾连在一起了,即变成:
  <asp:Repeater   id= "rptCategories "   runat= "server "   OnItemDataBound= "rptCategories_ItemDataBound ">    
  </asp:Repeater>    
像这种情况,在调试时浏览器是不报错的,但嵌套的结果就不出来,在代码上千行的HTML源程序中,查起来还是很头疼呀。所以我希望大家以后在处理问题时,最好从多个角度入手,全盘考虑,有时问题往往就出在你最熟悉的内容上.

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页