단일 속성 | 고객: <%# custID %> |
컬렉션 주문 | <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server"> |
식 연락처 | <%# ( customer.FirstName + " " + customer.LastName ) %> |
메소드의 반환 값 | : <%# GetBalance(custID) %> |
위 구문은 ASP의 Response.Write 편의 구문(<%= %>)과 유사해 보이지만 동작은 다음과 같습니다. 확실히 다릅니다. ASP Response.Write 편의 구문은 페이지가 처리되는 동안 값을 계산하는 반면, ASP.NET 데이터 바인딩 구문은 DataBind 메서드가 호출될 때만 값을 계산합니다.
DataBind는 페이지 및 모든 서버 컨트롤의 메서드입니다. 상위 컨트롤의 DataBind를 호출하면 모든 하위 컨트롤의 DataBind 메서드가 차례로 호출됩니다. 예를 들어 DataList1.DataBind()는 DataList 템플릿에 있는 모든 컨트롤의 DataBind 메서드를 호출합니다. 페이지의 DataBind 메서드(Page.DataBind())를 호출하거나 단순히 DataBind()를 호출하면 페이지의 모든 데이터 바인딩 표현식이 평가됩니다. DataBind 메서드는 다음 예제와 같이 일반적으로 페이지의 Page_Load 이벤트에서만 호출됩니다.
.aspx 페이지의 모든 선언 섹션에서 바인딩 구문을 사용하고 평가를 위해 런타임에서 예상하는 데이터 형식을 지정할 수 있습니다. 위 예제의 간단한 속성, 표현식 및 메서드는 평가 시 사용자에게 텍스트 콘텐츠를 표시합니다. 이 경우 데이터 바인딩 표현식의 값은 문자열 유형입니다. 위의 컬렉션 예제에서 데이터 바인딩 구문의 값 유형은 ListBox의 DataSource 속성입니다. 원하는 결과를 얻으려면 바인딩 표현식에서 값 유형을 캐스팅해야 한다는 것을 알게 될 것입니다. 예를 들어 count가 정수인 경우
레코드 수: <%# count.ToString() %>
ASP.NET 데이터 바인딩 구문은 공용 변수, 페이지 속성 및 페이지에 있는 다른 컨트롤의 속성 바인딩을 지원합니다. 다음 예에서는 페이지의 공용 변수 및 간단한 속성에 바인딩하는 방법을 보여줍니다. 이 값은 DataBind()가 호출되기 전에 초기화되었음을 참고하세요.
<스크립트 언어="VB" runat="서버">
하위 페이지_로드(발신자 개체, e As EventArgs)
페이지.데이터바인드
End Sub
ReadOnly 속성 custID() As String
얻다
"ALFKI" 반환
종료 종료
끝 속성
ReadOnly 속성 orderCount() As Integer
얻다
11을 반환
종료 종료
끝 속성
</스크립트>
<폼 액션="DataBind1_vb.aspx" runat="서버">
고객: <b><%# custID %></b><br />
미결 주문: <b><%# orderCount %></b>
</form>
다음 예제에서는 다른 컨트롤의 속성에 바인딩하는 방법을 보여줍니다.
<asp:DropDownList id="StateList" runat="server">
<asp:목록항목>CA</asp:목록항목>
…
</asp:DropDownList>
<asp:button ID="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat="server"/>
선택한 상태: <asp:label ID="Label1" text='<%# StateList.SelectedItem.Text %>' runat="server"/>
목록 유형 서버 컨트롤(예: DropDownList, ListBox 및 HTMLSelect)은 컬렉션을 데이터 소스로 사용합니다. 다음 예제에서는 공용 언어 런타임 컬렉션 유형에 바인딩하는 방법을 보여줍니다. 이러한 컨트롤은 Ienumerable, Icollection 또는 IlistSource 인터페이스를 지원하는 컬렉션에만 바인딩될 수 있습니다. 보다 일반적으로 ArrayList, Hashtable, DataView 및 DataReader에 바인딩될 수 있습니다. 다음 예제에서는 ArrayList에 바인딩하는 방법을 보여줍니다.
하위 페이지_로드(발신자 개체, e As EventArgs)
IsPost가 아닌 경우뒤로
ArrayList= new ArrayList()로 값을 어둡게 합니다.
값.추가("IN")
값.추가("KS")
값.추가("MD")
값.추가("MI")
값.추가("OR")
값.추가("TN")
DropDown1.DataSource = 값
DropDown1.DataBind
종료 조건
End Sub
다음 예제에서는 DataView에 바인딩하는 방법을 보여줍니다. DataView 클래스는 System.Data 네임스페이스에 정의되어 있습니다.
하위 페이지_로드(발신자 개체, e As EventArgs)
IsPost가 아닌 경우뒤로
데이터 테이블로 Dim dt
Dr를 DataRow로 희미하게 표시
Dim i As Integer
'DataTable 생성
dt = 새 데이터테이블
dt.Columns.Add(새 DataColumn("IntegerValue", GetType(Integer)))
dt.Columns.Add(새 DataColumn("StringValue", GetType(String)))
dt.Columns.Add(새 DataColumn("DateTimeValue", GetType(DateTime)))
dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean)))
' 일부 데이터를 입력합니다
For i = 1 To 9
dr = dt.NewRow()
dr(0) = 나
dr(1) = "항목" + i.ToString()
dr(2) = DateTime.Now.ToShortTimeString
만약 (i Mod 2 <> 0) 그러면
dr(3) = 참
또 다른
dr(3) = 거짓
종료 조건
'테이블 dt.Rows.Add(dr)에 데이터 행을 추가합니다.
다음
GridView1.DataSource = 새 DataView(dt)
GridView1.DataBind()
종료 조건
End Sub
다음 예에서는 Hashtable에 바인딩하는 방법을 보여줍니다.
하위 페이지_로드(발신자 개체, e As EventArgs)
IsPost가 아닌 경우뒤로
Dim h As Hashtable = 새로운 Hashtable()
h.추가("key1", "value1")
h.추가("key2", "value2")
h.Add ("key3", "value3")
MyDataList.DataSource = h
MyDataList.DataBind
종료 조건
End Sub
페이지나 컨트롤에 바인딩하기 전에 데이터를 처리해야 하는 경우가 많습니다. 다음 예제에서는 표현식 및 메서드 반환 값에 바인딩하는 방법을 보여줍니다.
하위 페이지_로드(발신자 개체, e As EventArgs)
IsPost가 아닌 경우뒤로
ArrayList= new ArrayList()
값으로 희미한 값.추가(0)
값.추가(1)
값.추가(2)
값.추가(3)
값.추가(4)
값.추가(5)
값.추가(6)
DataList1.DataSource = 값
DataList1.DataBind
종료 조건
End Sub
함수 EvenOrOdd(정수형 숫자) As String
(숫자 Mod 2 <> 0) 그렇다면
"이상함"을 반환합니다.
또 다른
"짝수"를 반환합니다.
종료 조건
끝 함수
<asp:DataList id="DataList1" ……>
<아이템템플릿>
숫자 값: <%# Container.DataItem %>
짝수/홀수: <%# EvenOrOdd(Container.DataItem) %>
</아이템템플릿>
</asp:데이터목록>
ASP.NET Page Framework 구성 요소는 런타임에 바인딩된 데이터 바인딩 식을 평가하고 선택적으로 결과를 문자열 형식으로 지정하는 정적 메서드를 제공합니다. 이 경우 DataBinder.Eval은 추정치를 원하는 데이터 형식으로 변환하기 위해 개발자가 수행해야 하는 명시적 변환 작업의 대부분을 제거하므로 편리합니다. 템플릿 기반 목록에 데이터 바인딩된 컨트롤이 있는 경우 특히 유용합니다. 이 경우 일반적으로 데이터 행과 데이터 필드를 모두 변환해야 하기 때문입니다.
정수를 통화 문자열로 표시해야 하는 다음 예를 살펴보세요. 표준 ASP.NET 데이터 바인딩 구문에서는 먼저 데이터 행의 형식을 변환하여 데이터 필드 IntegerValue를 검색해야 합니다. 그런 다음 이를 String.Format 메서드에 매개 변수로 전달합니다.
<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
이 구문은 매우 복잡하고 기억하기 쉽지 않습니다. 이와 대조적으로 DataBinder.Eval은 데이터 항목의 명명 컨테이너, 데이터 필드 이름 및 형식 문자열이라는 세 가지 매개 변수만 사용하는 간단한 메서드입니다. 템플릿 기반 컨트롤(예: FormView, GridView, DetailsView, DataList 또는 Repeater)에서 명명된 컨테이너는 Container.DataItem입니다. 페이지는 DataBinder.Eval에도 사용할 수 있는 또 다른 명명된 컨테이너입니다. 앞서 언급했듯이 ASP.NET 2.0은 데이터 바인딩된 컨트롤 템플릿에서 Container.DataItem을 자동으로 구문 분석하는 데 사용할 수 있는 DataBinder.Eval에 대한 새로운 단순화된 구문(Eval)을 제공합니다.
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
형식 문자열 매개변수는 선택사항입니다. 이 매개 변수를 생략하면 DataBinder.Eval은 아래와 같이 개체 유형 값을 반환합니다.
<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %>
주의해야 할 점은 , 표준 데이터 바인딩 구문과 비교하여 DataBinder.Eval은 지연 바인딩 반영을 사용하므로 성능에 큰 영향을 미칩니다. 특히 문자열 형식을 지정할 필요가 없는 경우 DataBinder.Eval을 현명하게 사용하십시오.