<%# %> 구문

ASP.NET에는 새로운 선언적 구문 <%# %>이 도입되었습니다. 이 구문은 .aspx 페이지에서 데이터 바인딩을 사용하는 데 기초가 됩니다. 모든 데이터 바인딩 식은 이러한 문자 내에 포함되어야 합니다. 다음은 여러 가지 원본으로부터의 간단한 데이터 바인딩 예제입니다.

 

간단한 속성 <%# custID %>
컬렉션 <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
<%# ( customer.First Name + " " + customer.LastName ) %>
메서드 결과 <%# GetBalance(custID) %>

앞의 예에서 인라인 <%# %> 태그는.aspx 페이지 내에서 특정 데이터 소스의 정보 위치를 나타냅니다.

Page.DataBind() 및 Control.DataBind()

특정 데이터 소스가 결정되고 .aspx 페이지에 개체가 설정된 후에 데이터를 바인딩해야 합니다. 두 메서드 중 하나를 사용하여 데이터를 데이터 소스인 Page.DataBind 또는 Control.DataBind 메서드에 바인딩할 수 있습니다.

두 메서드 모두 비슷하게 작동합니다. 주요 차이점은 Page.DataBind 메서드가 호출된 뒤에 모든 데이터 소스가 해당 서버 컨트롤에 바인딩된다는 것입니다. Page.DataBind가 서버 컨트롤에 대해 명시적으로 호출되거나 페이지 수준 DataBind 메서드가 실행될 때까지 데이터는 컨트롤에 렌더링되지 않습니다. 일반적으로 Page.DataBind(또는 간단히 DataBind)는 Page_Load 이벤트에서 호출됩니다.

DataBinder.Eval 메서드

데이터 소스가 데이터베이스에서 반환된 데이터로 작업하는 경우 데이터 소스는 여러 가지 정보를 포함할 수 있습니다. 일반적인 DataBinder.Eval 메서드를 사용하여 데이터를 반환할 수 있습니다. 아래 코드 예제에서 "au_id" 필드가 컨테이너 개체의 데이터 소스에서 반환됩니다.

<%# DataBinder.Eval(Container.DataItem,"au_id") %>

명시적 캐스팅

더 많은 컨트롤이 필요하면 명시적 캐스팅을 사용하십시오. 
명시적 변환은 종류 변환 키워드를 사용합니다.
이러한 키워드는 함수로 동작하지만 컴파일러는 코드 인라인을 생성합니다.
따라서 함수 호출보다는 실행이 약간 빠릅니다.
아래의 코드 예제는 명시적 캐스팅을 사용합니다.
// DataTable as the DataSource 
<%# ((System.Data.DataRowView)Container.DataItem)["au_id"] %>
 // DataReader as the DataSource 
<%# ((System.Data.Common.
DbDataRecord)Container.DataItem)["au_id"] %>
// DataReader as the DataSource
<%# ((System.Data.Common.
DbDataRecord)Container.DataItem)[0] %>
앞의 예는 데이터 소스로 DataSet의 하위 집합인 DataTable 또는 DataReader를 사용합니다.

ItemDataBound 이벤트

또 각 컨트롤의 ItemDataBound 이벤트를 사용하여 데이터를 바인딩할 수도 있습니다. 
이 이벤트는 항목이 컨트롤에 바인딩된 데이터일 때 발생합니다.
아래의 HTML 코드 예제는 ItemTemplate이 있는 Repeater 컨트롤을 정의합니다.
<asp:repeater id=rptr runat=server> 
<itemtemplate> <asp:label id=lblAuthorID runat=server /> </itemtemplate>
</asp:repeater>
페이지에 아래의 메서드가 필요합니다. 
public void Page_Init()
{
   rptr.ItemDataBound += new DataListItemEventHandler(rptr_OnItemDataBound);
}
public void Page_Load()
{
  // Need to retrieve data from a database
   // and bind it to a List control.
}
public void rptr_OnItemDataBound(object s, DataListItemEventArgs e)
{
   System.Data.Common.DbDataRecord rec
= (System.Data.Common.DbDataRecord)e.Item.DataItem;
   if(rec!=null) //Make sure that you have the data.
   {
      Label l1 = (Label)e.Item.FindControl("lblAuthorID");
      l1.Text = rec["au_id"].ToString();
   }
}

'.net' 카테고리의 다른 글

URL Rewriting in ASP.NET  (6) 2007.05.03
HTTP모듈을 이용해서 Refresh를 막는 방법  (1) 2007.05.03
ASP.NET 캐시  (0) 2007.05.03
GET, POST, Multipart/form-data의 처리  (1) 2007.05.03
쿠키, 어플리케이션 변수  (1) 2007.05.03

+ Recent posts