熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

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

<asp:ControlParameter Name=FirstKey ControlID=MasterGrid PropertyName=SelectedDataKeyValues[]/>
<asp:ControlParameter Name=SecondKey ControlID=MasterGrid PropertyName=SelectedDataKeyValues[]/>
  下面的例子演示的代碼枚舉了DataKeys集合並從GridView的SelectedDataKey中獲取鍵字段的值

Protected Sub GridView_SelectedIndexChanged(ByVal sender As Object ByVal e As SystemEventArgs)
ResponseWrite(<b>SelectedDataKeyValue: </b> & ServerHtmlEncode(GridViewSelectedDataKeyValue) & <br />)
ResponseWrite(<b>DataKey Field : </b> & ServerHtmlEncode(GridViewSelectedDataKeyValues(au_id)) & <br />)
ResponseWrite(<b>DataKey Field : </b> & ServerHtmlEncode(GridViewSelectedDataKeyValues(title_id)) & <br />)
End Sub
Protected Sub GridView_DataBound(ByVal sender As Object ByVal e As SystemEventArgs)
Dim key As DataKey
ResponseWrite(<b>GridView DataKeys: </b><br />)
For Each key In GridViewDataKeys
ResponseWrite(ServerHtmlEncode(keyValues()) & )
ResponseWrite(ServerHtmlEncode(keyValues()) & <br/>)
Next
End Sub
  前面的主-從表示例把從表的數據顯示在窗體的一個獨立的控件中但是有時候我們希望從表控件是嵌套在主表控件上作為主表的一部分來顯示的為了實現這種功能你必須把從表控件和相關的數據源都包含到主表控件的模板中並帶有一個數據源參數讓該參數從主表數據源的字段中獲取值由於使用這種方式的時候沒有可供關聯的宣告式參數對象你必須通過在代碼中編程來設置參數值當主表控件的數據項進行綁定的時候你可以在主表控件的某個事件處理(例如FormView的DataBound事件)中設置參數值下面的例子演示了這種技術

<script runat=server
Protected Sub FormView_DataBound(ByVal sender As Object ByVal e As SystemEventArgs)
OrderDetailsDataSourceSelectParameters(OrderID)DefaultValue = FormViewDataItem(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 ProductsProductName [Order Details]UnitPrice [Order Details]Quantity FROM [Order Details] INNER JOIN Products ON [Order Details]ProductID = ProductsProductID WHERE [Order Details]OrderID = @OrderID
<SelectParameters>
<asp:Parameter Name=OrderID />
</SelectParameters>
</asp:SqlDataSource>
  下面的例子演示了類似的技術它使用的是DataList處理DataList的ItemDataBound事件來設置數據源參數值

<script runat=server
Protected Sub DataList_ItemDataBound(ByVal sender As Object ByVal e As SystemWebUIWebControlsDataListItemEventArgs)
Dim s As SqlDataSource = eItemFindControl(OrderDetailsDataSource)
sSelectParameters(OrderID)DefaultValue = eItemDataItem(OrderID)
End Sub
</script>
From:http://tw.wingwit.com/Article/program/net/201311/11614.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.