Repeaterコントロールバインドの3つの方法

26169 ワード

テキストリンク:https://blog.csdn.net/WuLex

方式一

aspxページでは、ループ出力が必要な内容が記載されており、一般的にはユーザカスタマイズコントロール、サーバコントロール、Htmlフォーマットのセグメント、および
<asp:Repeater ID="rpImage" runat="server">
    <ItemTemplate>   
        <li>
            ">
<img src="//www.jb51.net/lmfeng/archive/2012/03/06/"
class="">
a>
li>
ItemTemplate>
asp:Repeater>

csファイルが まれており、GetProductImageListメソッドでListタイプのデータリストを し、Repeaterコントロールにバインドされています. のユーザカスタマイズコントロール、サーバコントロールは まれていません.したがって、ItemDataBoundイベントを とせずに、 のデータ をパーソナライズするための コードは、 の りである.

protected override void BindDataSource()
{
    this.rpImage.DataSource = GetProductImageList();
    this.rpImage.DataBind();
}

2

aspxページでは、 はユーザー コントロールが まれているため、ItemDataBoundイベントを してリスト の ユーザー コントロールをカスタマイズする があります.ユーザー コントロールには、 の または があり、ItemDataBoundイベントで を り てることができます.
コードは のとおりです.
<asp:Repeater ID="gvItemList" runat="server" EnableViewState="false">
    <ItemTemplate>
         <li>
             <UCCommon:ImageCell ID="imageCell" runat="server" />
             <a href="//www.jb51.net/lmfeng/archive/2012/03/06/###" title='"Name").ToString() %>' href='//www.jb51.net/lmfeng/archive/2012/03/06/"Code").ToString()%>'>
                 <UCCommon:ProductFullNameCell ID="productFullNameCell" runat="server" />
             a>
             <UCCommon:UCProductControlCell ID="productControlCell" runat="server"/>
         li>
    ItemTemplate>
asp:Repeater>
csファイルでは、ユーザー コントロールには の または があり、ItemDataBoundイベントに を り てます.コードは のとおりです.
protected override void BindDataSource()
{
    this.gvItemList.DataSource = productList;
    this.gvItemList.DataBind();
}
protected override void OnInit(EventArgs e)
{
    this.gvItemList.ItemDataBound += new RepeaterItemEventHandler(this.OnItemListDataBound);
    base.OnInit(e);
}
private void OnItemListDataBound(object sender, RepeaterItemEventArgs e)
{
    ProductCellInfo productItem = (ProductCellInfo)e.Item.DataItem;

    if (productItem != null)
    {
       ProductFullNameCell productName;
       ImageCell image;
       ProductControlCell productControlCell;

       foreach (Control sub in e.Item.Controls)
       {

           productName = sub as ProductFullNameCell;
           if (productName != null)
           {
               productName.InitProductFullName(productItem.Title, productItem.PromotionTitle, DispalyContentLength);
               continue;
           }

           image = sub as ImageCell;
           if (image != null)
           {
               image.InitImageCell2(productItem.ID, productItem.Code, productItem.Name, productItem.ImageUrl, productItem.ImageVersion);

               continue;
           }

           productControlCell = sub as ProductControlCell;
           if (productControlCell != null)
           {
               productControlCell.InitProductControlCell(productItem);
               continue;
           }
       }
   }
}


3:

aspxページでは、OnItemDataBoundのプロパティを することができます. 2のように、csファイルのOnInitメソッドで にバインドする はありません.コードは の りです.
コードは のとおりです.
<asp:Repeater ID="rptListCell" runat="server" OnItemDataBound="RptAllOnItemDataBound">
    <ItemTemplate>
        <li>
           <a href='//www.jb51.net/lmfeng/archive/2012/03/06/"ID"))>' title='"Name")) %>'>
                <span>span>
                <asp:PlaceHolder ID="pNew" runat="server" Visible="false">asp:PlaceHolder>
                <asp:PlaceHolder ID="pHot" runat="server" Visible="false">asp:PlaceHolder>
                <asp:Literal ID="literalValidGiftOption" runat="server">asp:Literal>
        a>
        li>
    ItemTemplate>
asp:Repeater>

csファイル:コードは のとおりです.
protected override void BindDataSource()
{
    base.BindDataSource();
    this.rptListCell.DataSource = this.List;
    this.rptListCell.DataBind();
}

protected void RptAllOnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    CategoryInfo category = (CategoryInfo)e.Item.DataItem;
    PlaceHolder pHot = e.Item.FindControl("pHot") as PlaceHolder;
    PlaceHolder pNew = e.Item.FindControl("pNew") as PlaceHolder;
    Literal lit = e.Item.FindControl("literalValidGiftOption") as Literal;
    switch (category.PromotionStatus)
    {
        case "H":
           pHot.Visible = true;
           break;
        case "N":
           pNew.Visible = true;
           break;
        default:
           break;
    }
    lit.Text = category.Name;
}