2007. 10. 12. 15:57
Repeater 컨트롤을 이용해 데이터를 바인딩 할 때 DataSet객체 또는 DataReader객체를 데이터 소스로 사용해 바인딩 하는 경우가 가장 많이 사용 됩니다.
일반적으로 아래와 같이 사용합니다.
/* DataSource에 DataRow 등을 이용해 바인딩 할 경우 */
<asp:repeater id="MyRepeater" runat="server">
<ItemTemplate>
<asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "wiz.pe.kr") %>
</ItemTemplate>
</asp:repeater>
위와 같은 일반적 상황에서는 데이터 바인딩에 문제를 느끼지 못하고 개발을 하죠. 하지만 문제는 데이터 소스로 배열 값을 이용해야 하는 경우도 있죠. 상당히 쉽지만 사용 빈도가 적어서 문법이 생각 나지 않을 때가 종종 있습니다. 아래와 같이 사용하면 됩니다.
/* DataSource에 배열을 바인딩 할 경우 */
<%# Container.DataItem %>
또 다른 방법은 바인딩 이벤트를 이용해서 코드에서 바인딩을 구현해 주면 됩니다.
이와 같은 방법은 강력하지만 상당히 많은 노력이 들어가죠.
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
// 이벤트를 등록 합니다.
this.linkList.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.linkList_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
private void linkList_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
// 바인딩 할 소스를 읽어드립니다.
string itm = e.Item.DataItem.ToString();
Literal tLinkURL = (Literal)e.Item.FindControl("linkURL");
if (tLinkURL != null)
{
tLinkURL.Text = itm;
}
}
}
간단한 내용 이지만 한번 정리 해봤습니다.