في المقالة السابقة، عرفنا بالفعل كيفية ربط ControlParameter (معلمة التحكم) بخاصية SelectedValue الخاصة بـ GridView لتنفيذ جدول البيانات الرئيسي والتابع. تقوم الخاصية SelectedValue بإرجاع قيمة الحقل الأول المحدد بواسطة الخاصية DataKeyNames. يمكنك أيضًا تحديد قيم حقول متعددة مفصولة بفواصل لخاصية DataKeyNames، على سبيل المثال، قد تحتاج إلى تمرير قيم متعددة إلى مصدر البيانات من الجدول. يتم عرض قيم حقول المفاتيح الإضافية هذه من خلال خاصية SelectedDataKey، والتي تُرجع كائن DataKey الذي يحتوي على زوج الاسم/القيمة لحقل المفتاح. يمكن لـ ControlParameter أيضًا الإشارة إلى هذه المفاتيح عن طريق تعيين خاصية PropertyName في التعبير (على سبيل المثال، SelectedDataKey.Values("title_id")).
<asp:ControlParameter Name = "FirstKey" ControlID = "MasterGrid" PropertyName = "SelectedDataKey.Values[0]"/>
<asp:ControlParameter Name = "SecondKey" ControlID = "MasterGrid" PropertyName = "SelectedDataKey.Values[1]"/>
يوضح المثال التالي التعليمات البرمجية التي تعداد مجموعة DataKeys وتحصل على قيمة حقل المفتاح من SelectedDataKey الخاص بـ GridView:
Sub GridView1_SelectedIndexChanged المحمي (مرسل ByVal ككائن، ByVal e كـ System.EventArgs)
Response.Write("<b>SelectedDataKey.Value: </b>" & Server.HtmlEncode(GridView1.SelectedDataKey.Value) & "<br />")
Response.Write("<b>DataKey Field 1: </b>" & Server.HtmlEncode(GridView1.SelectedDataKey.Values("au_id")) & "<br />")
Response.Write("<b>DataKey Field 2: </b>" & Server.HtmlEncode(GridView1.SelectedDataKey.Values("title_id")) & "<br />")
نهاية الفرعية
المحمي Sub GridView1_DataBound (ByVal sender As Object، ByVal e As System.EventArgs)
مفتاح خافت كـ DataKey
Response.Write("<b>GridView DataKeys: </b><br />")
لكل مفتاح في GridView1.DataKeys
Response.Write(Server.HtmlEncode(key.Values(0)) & "، ")
Response.Write(Server.HtmlEncode(key.Values(1)) & "<br/>")
التالي
End Sub
البيانات من الجدول التابع في عنصر تحكم مستقل للنموذج، ولكن في بعض الأحيان نريد أن يكون عنصر تحكم الجدول التابع متداخلاً في عنصر تحكم الجدول الرئيسي ويتم عرضه كجزء من الجدول الرئيسي . من أجل تحقيق هذه الوظيفة، يجب عليك تضمين عنصر تحكم الجدول التابع ومصادر البيانات ذات الصلة في قالب عنصر تحكم الجدول الرئيسي، وأن يكون لديك معلمة مصدر بيانات للحصول على القيمة من حقل مصدر بيانات الجدول الرئيسي. نظرًا لعدم وجود كائن معلمة تعريفية لربطه بهذا الأسلوب، يجب عليك تعيين قيمة المعلمة برمجيًا في التعليمات البرمجية. عندما تكون عناصر البيانات الخاصة بعنصر تحكم الجدول الرئيسي مرتبطة، يمكنك تعيين قيمة المعلمة في معالج حدث لعنصر تحكم الجدول الرئيسي (مثل حدث DataBound الخاص بـ FormView). يوضح المثال التالي هذه التقنية.
< تشغيل البرنامج النصي = "الخادم">
المحمي Sub FormView1_DataBound (ByVal sender As Object، ByVal e As System.EventArgs)
OrderDetailsDataSource.SelectParameters("OrderID").DefaultValue = FormView1.DataItem("OrderID")
نهاية الفرعية
</script>
<asp:FormView DataSourceID="OrdersDataSource"……>
<قالب العنصر>
<ب>معرف الطلب:</ب>
<asp:Label ID="OrderIDLabel" runat="server" Text='<%# Eval("OrderID") %>'></asp:Label><br />
…
<asp:GridView DataSourceID="OrderDetailsDataSource" ……>
…
</asp:GridView>
</قالب العنصر>
</asp:FormView>
<asp:SqlDataSource ConnectionString = "<%$ ConnectionStrings: Northwind %>" ID = "OrdersDataSource" runat = "server" SelectCommand = "SELECT [OrderID]، [OrderDate]، [ShipCity]، [ShipCountry] " ] من [الأوامر]">
</asp:SqlDataSource>
<asp:SqlDataSource ConnectionString = "<%$ ConnectionStrings: Northwind %>" ID = "OrderDetailsDataSource" runat = "server" SelectCommand = "SELECT [تفاصيل الطلب]. معرف الطلب، Products.ProductName، [تفاصيل الطلب]. سعر الوحدة، [Order التفاصيل].الكمية من [تفاصيل الطلب] المنتجات المشتركة الداخلية في [تفاصيل الطلب].ProductID = Products.ProductID أين [تفاصيل الطلب].OrderID = @OrderID">
<حدد المعلمات>
<asp: اسم المعلمة = "معرف الطلب" />
</حدد المعلمات>
</asp:SqlDataSource>
يوضح المثال التالي تقنية مشابهة، تستخدم DataList وتتعامل مع الحدث ItemDataBound الخاص بـ DataList لتعيين قيمة معلمة مصدر البيانات.
< تشغيل البرنامج النصي = "الخادم">
DataList1_ItemDataBound الفرعية المحمية (مرسل ByVal ككائن، ByVal e كـ System.Web.UI.WebControls.DataListItemEventArgs)
Dim s As SqlDataSource = e.Item.FindControl("OrderDetailsDataSource")
s.SelectParameters("OrderID").DefaultValue = e.Item.DataItem("OrderID")
نهاية الفرعية
</ نص >