程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET 2.0高級數據處理之主從數據表

ASP.NET 2.0高級數據處理之主從數據表

編輯:.NET實例教程

在前面的文章中,我們已經知道如何將ControlParameter(控件參數)與GridVIEw的SelectedValue屬性相關聯以實現主-從數據表。SelectedValue屬性返回DataKeyNames屬性所指定的第一個字段的值。你也可以給DataKeyNames屬性指定多個用逗號分隔的字段值,例如,你可能需要把多個值傳遞到從表的數據源。這些額外的鍵字段值是通過SelectedDataKey屬性暴露的,它返回一個DataKey對象,包含鍵字段的名稱/值對(pair)。通過在表達式中設置PropertyName屬性(例如SelectedDataKey.Values("title_id")),ControlParameter甚至於可以引用這些鍵。

<ASP:ControlParameter Name="FirstKey" ControlID="MasterGrid" PropertyName="SelectedDataKey.Values[0]"/>
<ASP:ControlParameter Name="SecondKey" ControlID="MasterGrid" PropertyName="SelectedDataKey.Values[1]"/>

  下面的例子演示的代碼枚舉了DataKeys集合,並從GridVIEw的SelectedDataKey中獲取鍵字段的值:

Protected Sub GridVIEw1_SelectedIndExchanged(ByVal sender As Object, ByVal e As 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 />")
End Sub 
Protected Sub GridVIEw1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
Dim key As DataKey
Response.Write("<b>GridVIEw DataKeys: </b><br />")
For Each key In GridVIEw1.DataKeys
Response.Write(Server.HtmlEncode(key.Values(0)) & ", ")
Response.Write(Server.HtmlEncode(key.Values(1)) & "<br/>")
Next
End Sub

  前面的主-從表示例把從表的數據顯示在窗體的一個獨立的控件中,但是有時候我們希望從表控件是嵌套在主表控件上,作為主表的一部分來顯示的。為了實現這種功能,你必須把從表控件和相關的數據源都包含到主表控件的模板中,並帶有一個數據源參數,讓該參數從主表數據源的字段中獲取值。由於使用這種方式的時候,沒有可供關聯的宣告式參數對象,你必須通過在代碼中編程來設置參數值。當主表控件的數據項進行綁定的時候,你可以在主表控件的某個事件處理(例如FormVIEw的DataBound事件)中設置參數值。下面的例子演示了這種技術。

<script runat="server">
Protected Sub FormVIEw1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
OrderDetailsDataSource.SelectParameters("OrderID").DefaultValue = FormVIEw1.DataItem("OrderID")
End Sub
</script>

<ASP:FormVIEw DataSourceID="OrdersDataSource"……>
<ItemTemplate>
<b>OrderID:</b>
<asp:Label ID="OrderIDLabel" runat="server" Text='<%# Eval("OrderID") %>'></ASP:Label><br />
……
<ASP:GridVIEw DataSourceID="OrderDetailsDataSource" ……>
……
</ASP:GridVIEw>
</ItemTemplate>
</ASP:FormVIEw>

<ASP:SqlDataSource ConnectionString="<%$ ConnectionStrings:Northwind %>" ID="OrdersDataSource" runat="server" SelectCommand="SELECT [OrderID], [OrderDate], [ShipCity], [ShipCountry] FROM [Orders]">
</ASP:SqlDataSource>
<ASP:SqlDataSource ConnectionString="<%$ ConnectionStrings:Northwind %>" ID="OrderDetailsDataSource" runat="server" SelectCommand="SELECT [Order Details].OrderID, Products.ProductName, [Order Details].UnitPrice, [Order Details].Quantity FROM [Order Details] INNER JOIN Products ON [Order Details].ProductID = Products.ProductID WHERE [Order Details].OrderID = @OrderID">
<SelectParameters>
<ASP:Parameter Name="OrderID" />
</SelectParameters>
</a
sp:SqlDataSource>

  下面的例子演示了類似的技術,它使用的是DataList,處理DataList的ItemDataBound事件來設置數據源參數值。

<script runat="server">
Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs)
Dim s As SqlDataSource = e.Item.FindControl("OrderDetailsDataSource")
s.SelectParameters("OrderID").DefaultValue = e.Item.DataItem("OrderID")
End Sub
</script>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved