Atribut tunggal | Pelanggan: <%# custID %> |
Koleksi Pesanan | <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server"> |
Ekspresi Kontak | <%# ( customer.FirstName + " " + customer.LastName ) %> |
Nilai yang dikembalikan dari metode | Saldo Luar Biasa: <%# GetBalance(custID) %> |
Meskipun sintaks di atas terlihat mirip dengan sintaks kenyamanan Response.Write ASP (<%= %>), perilakunya adalah Tapi itu pasti berbeda. Sintaks kenyamanan ASP Response.Write menghitung nilai saat halaman sedang diproses, sedangkan sintaksis pengikatan data ASP.NET hanya menghitung nilai ketika metode DataBind dipanggil.
DataBind adalah metode halaman dan semua kontrol server. Saat Anda memanggil DataBind dari kontrol induk, metode DataBind dari semua kontrol anak akan dipanggil secara bergantian. Misalnya, DataList1.DataBind() akan memanggil metode DataBind dari semua kontrol di templat DataList. Memanggil metode DataBind laman -- Page.DataBind() atau sekadar memanggil DataBind() -- menyebabkan evaluasi semua ekspresi pengikatan data pada laman. Metode DataBind biasanya hanya dipanggil pada event Page_Load halaman, seperti yang ditunjukkan pada contoh berikut.
Di bagian deklaratif mana pun pada halaman .aspx, Anda dapat menggunakan sintaks pengikatan dan menentukan tipe data yang diharapkan oleh runtime untuk evaluasinya. Properti, ekspresi, dan metode sederhana dalam contoh di atas menampilkan konten teks kepada pengguna saat dievaluasi. Dalam hal ini, nilai ekspresi pengikatan data bertipe String. Dalam contoh kumpulan di atas, tipe nilai sintaks pengikatan data adalah properti DataSource dari ListBox. Anda akan menemukan bahwa memasukkan tipe nilai dalam ekspresi pengikatan diperlukan untuk menghasilkan hasil yang diinginkan. Misalnya, jika hitungan adalah bilangan bulat:
Jumlah Catatan: <%# count.ToString() %>
Sintaks pengikatan data ASP.NET mendukung pengikatan variabel publik, properti halaman, dan properti kontrol lain di halaman. Contoh berikut menunjukkan cara mengikat variabel publik dan properti halaman sederhana. Harap dicatat bahwa nilai-nilai ini telah diinisialisasi sebelum DataBind() dipanggil.
<bahasa skrip="VB" runat="server">
Sub Page_Load(pengirim Sebagai Objek, dan Sebagai EventArgs)
Halaman.DataBind
Akhiri Sub
Properti ReadOnly custID() Sebagai String
Mendapatkan
Kembalikan "ALFKI"
Akhir Dapatkan
Properti Akhir
Properti ReadOnly orderCount() Sebagai Integer
Mendapatkan
Kembali 11
Akhir Dapatkan
Properti Akhir
</skrip>
<form action="DataBind1_vb.aspx" runat="server">
Pelanggan: <b><%# custID %></b><br />
Pesanan Terbuka: <b><%# orderCount %></b>
</form>
Contoh berikut menunjukkan cara mengikat properti kontrol lain:
<asp:DropDownList id="StateList" runat="server">
<asp:ListItem>CA</asp:ListItem>
…
</asp:DropDownList>
<asp:button ID="Button1" Text="Kirim" OnClick="SubmitBtn_Click" runat="server"/>
Status yang Dipilih: <asp:label ID="Label1" text='<%# StateList.SelectedItem.Text %>' runat="server"/>
Kontrol server tipe daftar (seperti DropDownList, ListBox, dan HTMLSelect) menggunakan koleksi sebagai sumber data. Contoh berikut menunjukkan cara mengikat jenis kumpulan runtime bahasa umum. Kontrol ini hanya dapat terikat pada koleksi yang mendukung antarmuka Ienumerable, Icollection, atau IlistSource. Lebih umum lagi, ini dapat diikat ke ArrayList, Hashtable, DataView dan DataReader. Contoh berikut menunjukkan cara mengikat ke ArrayList.
Sub Page_Load(pengirim Sebagai Objek, dan Sebagai EventArgs)
Jika Bukan IsPostBack Lalu
Redupkan nilai sebagai ArrayList= new ArrayList()
nilai.Tambahkan("MASUK")
nilai.Tambahkan("KS")
nilai.Tambahkan("MD")
nilai.Tambahkan("MI")
nilai.Tambahkan ("ATAU")
nilai.Tambahkan ("TN")
DropDown1.DataSource = nilai
DropDown1.DataBind
Akhiri Jika
Sub AkhirContoh
berikut menunjukkan cara mengikat ke DataView. Harap dicatat bahwa kelas DataView didefinisikan dalam namespace System.Data.
Sub Page_Load(pengirim Sebagai Objek, dan Sebagai EventArgs)
Jika Bukan IsPostBack Lalu
Redupkan dt Sebagai DataTable
Redupkan dr Sebagai DataRow
Redupkan saya Sebagai Integer
'Buat DataTable
dt = Tabel Data Baru
dt.Columns.Add(DataColumn Baru("IntegerValue", GetType(Integer)))
dt.Columns.Add(DataColumn Baru("StringValue", GetType(String)))
dt.Columns.Add(DataColumn Baru("DateTimeValue", GetType(DateTime)))
dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean)))
'Isi beberapa data
Untuk i = 1 Sampai 9
dr = dt.Baris Baru()
dr(0) = saya
dr(1) = "Barang " + i.ToString()
dr(2) = TanggalWaktu.Sekarang.ToShortTimeString
Jika (i Mod 2 <> 0) Lalu
dr(3) = Benar
Kalau tidak
dr(3) = Salah
Akhiri Jika
'Tambahkan baris data ke tabel dt.Rows.Add(dr)
Berikutnya
GridView1.DataSource = DataView Baru(dt)
GridView1.DataBind()
Akhiri Jika
Sub Akhir
Contoh berikut menunjukkan cara mengikat ke Hashtable.
Sub Page_Load(pengirim Sebagai Objek, dan Sebagai EventArgs)
Jika Bukan IsPostBack Lalu
Redupkan h Sebagai Hashtable = Hashtable baru()
h.Tambahkan ("kunci1", "nilai1")
h.Tambahkan ("kunci2", "nilai2")
h.Tambahkan ("kunci3", "nilai3")
MyDataList.DataSource = h
DaftarData Saya.DataBind
Akhiri Jika
End Sub
Seringkali, Anda mungkin ingin memproses data sebelum mengikat ke halaman atau kontrol. Contoh berikut menunjukkan cara mengikat ekspresi dan nilai pengembalian metode.
Sub Page_Load(pengirim Sebagai Objek, dan Sebagai EventArgs)
Jika Bukan IsPostBack Lalu
Redupkan nilai sebagai ArrayList=
nilai ArrayList() baru.Tambahkan (0)
nilai.Tambahkan (1)
nilai.Tambahkan (2)
nilai.Tambahkan(3)
nilai.Tambahkan(4)
nilai.Tambahkan(5)
nilai.Tambahkan (6)
DataList1.DataSource = nilai
Daftar Data1.DataBind
Akhiri Jika
Akhiri Sub
Fungsi Genap Atau Ganjil (angka Sebagai Integer) Sebagai String
Jika (nomor Mod 2 <> 0) Maka
Kembalikan "Aneh"
Kalau tidak
Kembalikan "Genap"
Akhiri Jika
Fungsi Akhir
<asp:DataList id="DataList1" ......>
<Templat Barang>
Nilai Angka: <%# Container.DataItem %>
Genap/Ganjil: <%# GenapOrOdd(Container.DataItem) %>
</Templat Barang>
</asp:Daftar Data>
Komponen ASP.NET Page Framework menyediakan metode statis yang mengevaluasi ekspresi pengikatan data terikat akhir dan secara opsional memformat hasilnya sebagai string. Dalam hal ini, DataBinder.Eval nyaman karena menghilangkan banyak pekerjaan konversi eksplisit yang harus dilakukan pengembang untuk mengonversi perkiraan ke tipe data yang diinginkan. Hal ini sangat berguna ketika ada kontrol terikat data dalam daftar templat, karena dalam hal ini biasanya baris data dan bidang data harus dikonversi.
Lihatlah contoh berikut, yang perlu menampilkan bilangan bulat sebagai string mata uang. Dalam sintaks pengikatan data ASP.NET standar, Anda harus terlebih dahulu mengonversi tipe baris data untuk mengambil bidang data IntegerValue. Kemudian meneruskannya sebagai parameter ke metode String.Format.
<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
Sintaks ini sangat rumit dan tidak mudah diingat. Sebaliknya, DataBinder.Eval adalah metode sederhana dengan hanya tiga parameter: wadah penamaan item data, nama bidang data, dan format string. Dalam kontrol templat (seperti FormView, GridView, DetailsView, DataList, atau Repeater), kontainer bernama adalah Container.DataItem. Halaman adalah wadah bernama lain yang juga dapat digunakan untuk DataBinder.Eval. Seperti yang kami sebutkan sebelumnya, ASP.NET 2.0 menyediakan sintaks baru yang disederhanakan (Eval) untuk DataBinder.Eval, yang dapat Anda gunakan dalam templat kontrol terikat data untuk mengurai Container.DataItem secara otomatis.
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
Parameter format string bersifat opsional. Jika parameter ini dihilangkan, DataBinder.Eval akan mengembalikan nilai tipe Objek, seperti yang ditunjukkan di bawah ini:
<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %> Yang
harus kita perhatikan adalah , dengan standar Dibandingkan dengan sintaks pengikatan data, DataBinder.Eval akan mempengaruhi kinerja secara signifikan karena menggunakan refleksi pengikatan lambat. Harap gunakan DataBinder.Eval dengan bijak, terutama jika Anda tidak perlu memformat string.