Pada artikel sebelumnya, kita telah mengetahui cara mengaitkan ControlParameter (parameter kontrol) dengan properti SelectedValue dari GridView untuk mengimplementasikan tabel data master-slave. Properti SelectedValue mengembalikan nilai bidang pertama yang ditentukan oleh properti DataKeyNames. Anda juga dapat menentukan beberapa nilai bidang yang dipisahkan koma untuk properti DataKeyNames, misalnya, Anda mungkin perlu meneruskan beberapa nilai ke sumber data dari tabel. Nilai bidang kunci tambahan ini diekspos melalui properti SelectedDataKey, yang mengembalikan objek DataKey yang berisi pasangan nama/nilai bidang kunci. ControlParameter bahkan dapat mereferensikan kunci ini dengan mengatur properti PropertyName dalam ekspresi (misalnya, SelectedDataKey.Values("title_id")).
<asp:ControlParameter Name="FirstKey" ControlID="MasterGrid" PropertyName="SelectedDataKey.Values[0]"/>
<asp:ControlParameter Name="SecondKey" ControlID="MasterGrid" PropertyName="SelectedDataKey.Values[1]"/>
Contoh berikut menunjukkan kode yang menghitung koleksi DataKeys dan memperoleh nilai bidang kunci dari SelectedDataKey dari GridView:
Sub Dilindungi GridView1_SelectedIndexChanged (Pengirim ByVal Sebagai Objek, ByVal dan Sebagai Sistem.EventArgs)
Response.Write("<b>SelectedDataKey.Value: </b>" & Server.HtmlEncode(GridView1.SelectedDataKey.Value) & "<br />")
Response.Write("<b>Bidang DataKey 1: </b>" & Server.HtmlEncode(GridView1.SelectedDataKey.Values("au_id")) & "<br />")
Response.Write("<b>Bidang DataKey 2: </b>" & Server.HtmlEncode(GridView1.SelectedDataKey.Values("title_id")) & "<br />")
Akhiri Sub
Sub GridView1_DataBound yang Dilindungi (pengirim ByVal Sebagai Objek, ByVal dan Sebagai Sistem.EventArgs)
Kunci redup Sebagai DataKey
Response.Write("<b>Keys Data GridView: </b><br />")
Untuk Setiap kunci Di GridView1.DataKeys
Respons.Tulis(Server.HtmlEncode(key.Values(0)) & ", ")
Respons.Tulis(Server.HtmlEncode(key.Values(1)) & "<br/>")
Berikutnya
End Sub
menampilkan data dari tabel slave dalam bentuk kontrol independen, namun terkadang kita ingin kontrol tabel slave disarangkan di kontrol tabel master dan ditampilkan sebagai bagian dari tabel master . Untuk mencapai fungsi ini, Anda harus menyertakan kontrol tabel budak dan sumber data terkait ke dalam templat kontrol tabel utama, dan memiliki parameter sumber data untuk mendapatkan nilai dari bidang sumber data tabel utama. Karena tidak ada objek parameter deklaratif untuk dikaitkan dengan pendekatan ini, Anda harus menetapkan nilai parameter secara terprogram dalam kode. Ketika item data dari kontrol tabel utama terikat, Anda dapat mengatur nilai parameter dalam pengendali kejadian dari kontrol tabel utama (seperti kejadian DataBound dari FormView). Contoh berikut menunjukkan teknik ini.
<skrip runat="server">
Sub FormView1_DataBound yang Dilindungi (pengirim ByVal Sebagai Objek, ByVal dan Sebagai Sistem.EventArgs)
OrderDetailsDataSource.SelectParameters("OrderID").DefaultValue = FormView1.DataItem("OrderID")
Akhiri Sub
</script>
<asp:FormView DataSourceID="OrdersDataSource"……>
<Templat Barang>
<b>ID Pesanan:</b>
<asp:Label ID="OrderIDLabel" runat="server" Text='<%# Eval("OrderID") %>'></asp:Label><br />
…
<asp:GridView DataSourceID="OrderDetailsDataSource" ......>
…
</asp:Tampilan Grid>
</Templat Barang>
</asp:FormView>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Northwind %>" ID="OrdersDataSource" runat="server" SelectCommand="PILIH [OrderID], [OrderDate], [ShipCity], [ShipCountry " ] DARI [Pesanan]">
</asp:SqlDataSource>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Northwind %>" ID="OrderDetailsDataSource" runat="server" SelectCommand="PILIH [Detail Pesanan].OrderID, Products.ProductName, [Detail Pesanan].Harga Unit, [Pesanan Detail].Jumlah DARI [Detail Pesanan] INNER JOIN Produk PADA [Detail Pesanan].ProductID = Products.ProductID WHERE [Detail Pesanan].OrderID = @OrderID">
<PilihParameter>
<asp:Nama Parameter="ID Pesanan" />
</PilihParameter>
</asp:SqlDataSource>
Contoh berikut menunjukkan teknik serupa, yang menggunakan DataList dan menangani kejadian ItemDataBound dari DataList untuk mengatur nilai parameter sumber data.
<skrip runat="server">
Sub DataList1_ItemDataBound yang Dilindungi (Pengirim ByVal Sebagai Objek, ByVal dan Sebagai System.Web.UI.WebControls.DataListItemEventArgs)
Redupkan As SqlDataSource = e.Item.FindControl("OrderDetailsDataSource")
s.SelectParameters("OrderID").DefaultValue = e.Item.DataItem("OrderID")
Akhiri Sub
</skrip>