คุณลักษณะเดี่ยว | ลูกค้า: <%# custID %> |
คำสั่งซื้อคอลเลกชัน | <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server"> |
Expression Contact | <%# ( customer.FirstName + " " + customer.LastName ) %> |
ค่าที่ส่งคืนของวิธี | การคงค้างยอดคงเหลือ: <%# GetBalance(custID) %> |
แม้ว่าไวยากรณ์ข้างต้นจะดูคล้ายกับไวยากรณ์ Response.Write ของ ASP ที่สะดวก (<%= %>) ลักษณะการทำงานของพวกเขาคือ แต่มันเป็น แตกต่างอย่างแน่นอน ไวยากรณ์ความสะดวกสบายของ ASP Response.Write จะคำนวณค่าในขณะที่เพจกำลังประมวลผล ในขณะที่ไวยากรณ์การเชื่อมโยงข้อมูลของ ASP.NET จะคำนวณค่าเมื่อมีการเรียกใช้เมธอด DataBind เท่านั้น
DataBind เป็นวิธีการของเพจและการควบคุมเซิร์ฟเวอร์ทั้งหมด เมื่อคุณเรียก DataBind ของตัวควบคุมหลัก มันจะเรียกเมธอด DataBind ของตัวควบคุมลูกทั้งหมดตามลำดับ ตัวอย่างเช่น DataList1.DataBind() จะเรียกใช้เมธอด DataBind ของตัวควบคุมทั้งหมดในเทมเพลต DataList การเรียกเมธอด DataBind ของเพจ -- Page.DataBind() หรือเพียงแค่เรียก DataBind() -- ทำให้เกิดการประเมินนิพจน์การผูกข้อมูลทั้งหมดบนเพจ โดยปกติแล้วเมธอด DataBind จะถูกเรียกเฉพาะในเหตุการณ์ Page_Load ของเพจ ดังที่แสดงในตัวอย่างต่อไปนี้
ในส่วนการประกาศใดๆ ของเพจ .aspx คุณสามารถใช้ไวยากรณ์การเชื่อมโยงและระบุประเภทข้อมูลที่รันไทม์คาดหวังสำหรับการประเมินได้ คุณสมบัติ นิพจน์ และวิธีการอย่างง่ายในตัวอย่างด้านบนแสดงเนื้อหาข้อความแก่ผู้ใช้เมื่อได้รับการประเมิน ในกรณีนี้ ค่าของนิพจน์การผูกข้อมูลจะเป็นประเภทสตริง ในตัวอย่างคอลเลกชันด้านบน ประเภทค่าของไวยากรณ์การเชื่อมโยงข้อมูลคือคุณสมบัติแหล่งข้อมูลของกล่องรายการ คุณจะพบว่าการหล่อประเภทของค่าในนิพจน์การรวมเป็นสิ่งจำเป็นเพื่อให้ได้ผลลัพธ์ที่ต้องการ ตัวอย่างเช่น ถ้า count เป็นจำนวนเต็ม:
Number of Records: <%# count.ToString() %>
ไวยากรณ์การเชื่อมโยงข้อมูลของ ASP.NET สนับสนุนการเชื่อมโยงตัวแปรสาธารณะ คุณสมบัติเพจ และคุณสมบัติของตัวควบคุมอื่นๆ ในเพจ ตัวอย่างต่อไปนี้สาธิตวิธีการผูกกับตัวแปรสาธารณะและคุณสมบัติอย่างง่ายของเพจ โปรดทราบว่าค่าเหล่านี้ได้รับการเริ่มต้นก่อนที่จะเรียก DataBind()
<ภาษาสคริปต์ = "VB" runat = "เซิร์ฟเวอร์" >
Sub Page_Load (ผู้ส่งเป็นวัตถุ e As EventArgs)
หน้า.DataBind
สิ้นสุด
คุณสมบัติย่อยแบบอ่านอย่างเดียว custID() เป็นสตริง
รับ
กลับ "ALFKI"
จบรับ
สิ้นสุดคุณสมบัติ
อ่านอย่างเดียวคุณสมบัติ orderCount() เป็นจำนวนเต็ม
รับ
กลับ 11
จบรับ
สิ้นสุดคุณสมบัติ
</สคริปต์><
<การกระทำของแบบฟอร์ม = "DataBind1_vb.aspx" runat = "เซิร์ฟเวอร์" >
ลูกค้า: <b><%# custID %></b><br />
เปิดคำสั่งซื้อ: <b><%# orderCount %><</b>
</form>
ตัวอย่างต่อไปนี้สาธิตวิธีการผูกเข้ากับคุณสมบัติของตัวควบคุมอื่น:
<asp:DropDownList id="StateList" runat="server">
<asp:ListItem><CA</asp:ListItem>
-
</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
Sub Page_Load (ผู้ส่งเป็นวัตถุ e As EventArgs)
ถ้าไม่เป็นPostBack แล้ว
ค่า Dim เป็น ArrayList= new ArrayList()
ค่าเพิ่ม("ใน")
ค่าเพิ่ม("KS")
ค่านิยมเพิ่ม("MD")
ค่าเพิ่ม("MI")
ค่าเพิ่ม ("หรือ")
ค่าเพิ่ม ("TN")
DropDown1.DataSource = ค่า
DropDown1.DataBind
สิ้นสุดถ้า
สิ้นสุด Sub
ตัวอย่างต่อไปนี้สาธิตวิธีการผูกกับ DataView โปรดทราบว่าคลาส DataView ถูกกำหนดไว้ในเนมสเปซ System.Data
Sub Page_Load (ผู้ส่งเป็นวัตถุ e As EventArgs)
ถ้าไม่เป็นPostBack แล้ว
Dim dt เป็น DataTable
หรี่ Dr As DataRow
Dim i As Integer
'สร้าง DataTable
dt = ตารางข้อมูลใหม่
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))
dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean)))
'กรอกข้อมูลบางส่วน
สำหรับ i = 1 ถึง 9
ดร. = dt.NewRow()
ดร.(0) = ผม
dr(1) = "รายการ" + i.ToString()
dr(2) = DateTime.Now.ToShortTimeString
ถ้า (i Mod 2 <> 0) จากนั้น
ดร.(3) = จริง
อื่น
dr(3) = เท็จ
สิ้นสุดถ้า
'เพิ่มแถวข้อมูลลงในตาราง dt.Rows.Add(dr)
ถัดไป
= DataView ใหม่ (dt)
GridView1.DataBind()
สิ้นสุดถ้า
End Sub
ตัวอย่างต่อไปนี้สาธิตวิธีการผูกเข้ากับ Hashtable
Sub Page_Load (ผู้ส่งเป็นวัตถุ e As EventArgs)
ถ้าไม่เป็นPostBack แล้ว
Dim h As Hashtable = ใหม่ Hashtable()
h.Add ("key1", "value1")
h.Add ("key2", "value2")
h.Add ("key3", "value3")
MyDataList.DataSource = h
MyDataList.DataBind
สิ้นสุดถ้า
สิ้นสุดย่อย
บ่อยครั้ง คุณอาจต้องการประมวลผลข้อมูลก่อนที่จะเชื่อมโยงกับเพจหรือตัวควบคุม ตัวอย่างต่อไปนี้สาธิตวิธีการผูกกับนิพจน์และคืนค่าเมธอด
Sub Page_Load (ผู้ส่งเป็นวัตถุ e As EventArgs)
ถ้าไม่เป็นPostBack แล้ว
ค่า Dim เป็น ArrayList=
ค่า ArrayList() ใหม่ เพิ่ม (0)
ค่าเพิ่ม (1)
ค่าเพิ่ม (2)
ค่าเพิ่ม(3)
ค่าเพิ่ม(4)
ค่านิยมเพิ่ม(5)
ค่าเพิ่ม (6)
DataList1.DataSource = ค่า
DataList1.DataBind
สิ้นสุดถ้า
สิ้นสุดฟังก์ชันย่อย
EvenOrOdd (ตัวเลขเป็นจำนวนเต็ม) เป็นสตริง
ถ้า (หมายเลข Mod 2 <> 0) จากนั้น
ส่งคืน "คี่"
อื่น
ส่งคืน "คู่"
สิ้นสุดถ้า
สิ้นสุดฟังก์ชัน
<asp:DataList id="DataList1" ……>
<เทมเพลตรายการ>
ค่าตัวเลข: <%# Container.DataItem %><
คู่/คี่: <%# คู่หรือคี่(Container.DataItem) %><
</เทมเพลตรายการ">
</asp:DataList>
คอมโพเนนต์ ASP.NET Page Framework มีวิธีการคงที่ที่ประเมินนิพจน์การผูกข้อมูลที่ถูกผูกไว้ล่าช้า และอาจจัดรูปแบบผลลัพธ์เป็นสตริงก็ได้ ในกรณีนี้ DataBinder.Eval มีความสะดวก เนื่องจากจะขจัดงานการแปลงที่ชัดเจนจำนวนมากที่นักพัฒนาต้องทำเพื่อแปลงการประมาณค่าเป็นประเภทข้อมูลที่ต้องการ ซึ่งจะมีประโยชน์อย่างยิ่งเมื่อมีตัวควบคุมที่ผูกกับข้อมูลในรายการเทมเพลต เนื่องจากในกรณีนั้น โดยปกติแล้วทั้งแถวข้อมูลและเขตข้อมูลจะต้องถูกแปลง
ดูตัวอย่างต่อไปนี้ ซึ่งจำเป็นต้องแสดงจำนวนเต็มเป็นสตริงสกุลเงิน ในไวยากรณ์การผูกข้อมูล ASP.NET มาตรฐาน คุณต้องแปลงชนิดของแถวข้อมูลก่อนเพื่อดึงข้อมูลเขตข้อมูล IntegerValue จากนั้นส่งผ่านเป็นพารามิเตอร์ไปยังเมธอด String.Format
<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
ไวยากรณ์นี้ซับซ้อนมากและไม่ใช่เรื่องง่ายที่จะจดจำ ในทางตรงกันข้าม DataBinder.Eval เป็นวิธีง่ายๆ ที่มีเพียงสามพารามิเตอร์เท่านั้น ได้แก่ คอนเทนเนอร์การตั้งชื่อรายการข้อมูล ชื่อฟิลด์ข้อมูล และสตริงรูปแบบ ในตัวควบคุมที่สร้างเทมเพลต (เช่น FormView, GridView, DetailView, DataList หรือ Repeater) คอนเทนเนอร์ที่มีชื่อคือ Container.DataItem เพจเป็นอีกคอนเทนเนอร์ที่มีชื่อซึ่งสามารถใช้สำหรับ DataBinder.Eval ได้ ดังที่เราได้กล่าวไว้ก่อนหน้านี้ ASP.NET 2.0 มีไวยากรณ์ที่เรียบง่ายแบบใหม่ (Eval) สำหรับ DataBinder.Eval ซึ่งคุณสามารถใช้ในเทมเพลตการควบคุมที่ผูกกับข้อมูลเพื่อแยกวิเคราะห์ Container.DataItem โดยอัตโนมัติ
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
พารามิเตอร์สตริงรูปแบบเป็นทางเลือก หากละเว้นพารามิเตอร์นี้ DataBinder.Eval จะส่งกลับค่าประเภทวัตถุดังแสดงด้านล่าง:
<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %> สิ่งที่
เราควรใส่ใจก็คือ ด้วยมาตรฐาน เมื่อเปรียบเทียบกับไวยากรณ์การผูกข้อมูล DataBinder.Eval จะส่งผลต่อประสิทธิภาพอย่างมากเนื่องจากใช้การสะท้อนการผูกแบบขี้เกียจ โปรดใช้ DataBinder.Eval อย่างชาญฉลาด โดยเฉพาะอย่างยิ่งหากคุณไม่จำเป็นต้องจัดรูปแบบสตริง