Repeaterコントロールバインドの3つの方法
テキストリンク: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;
}