在前面的文章中
我們已經知道如何將ControlParameter(控件參數)與GridView的SelectedValue屬性相關聯以實現主-從數據表
SelectedValue屬性返回DataKeyNames屬性所指定的第一個字段的值
你也可以給DataKeyNames屬性指定多個用逗號分隔的字段值
例如
你可能需要把多個值傳遞到從表的數據源
這些額外的鍵字段值是通過SelectedDataKey屬性暴露的
它返回一個DataKey對象
包含鍵字段的名稱/值對(pair)
通過在表達式中設置PropertyName屬性(例如SelectedDataKey
Values(
title_id
))
ControlParameter甚至於可以引用這些鍵
<asp:ControlParameter Name=
FirstKey
ControlID=
MasterGrid
PropertyName=
SelectedDataKey
Values[
]
/>
<asp:ControlParameter Name=
SecondKey
ControlID=
MasterGrid
PropertyName=
SelectedDataKey
Values[
]
/>
下面的例子演示的代碼枚舉了DataKeys集合
並從GridView的SelectedDataKey中獲取鍵字段的值
Protected Sub GridView
_SelectedIndexChanged(ByVal sender As Object
ByVal e As System
EventArgs)
Response
Write(
<b>SelectedDataKey
Value: </b>
& Server
HtmlEncode(GridView
SelectedDataKey
Value) &
<br />
)
Response
Write(
<b>DataKey Field
: </b>
& Server
HtmlEncode(GridView
SelectedDataKey
Values(
au_id
)) &
<br />
)
Response
Write(
<b>DataKey Field
: </b>
& Server
HtmlEncode(GridView
SelectedDataKey
Values(
title_id
)) &
<br />
)
End Sub
Protected Sub GridView
_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 GridView
DataKeys
Response
Write(Server
HtmlEncode(key
Values(
)) &
)
Response
Write(Server
HtmlEncode(key
Values(
)) &
<br/>
)
Next
End Sub
前面的主-從表示例把從表的數據顯示在窗體的一個獨立的控件中
但是有時候我們希望從表控件是嵌套在主表控件上
作為主表的一部分來顯示的
為了實現這種功能
你必須把從表控件和相關的數據源都包含到主表控件的模板中
並帶有一個數據源參數
讓該參數從主表數據源的字段中獲取值
由於使用這種方式的時候
沒有可供關聯的宣告式參數對象
你必須通過在代碼中編程來設置參數值
當主表控件的數據項進行綁定的時候
你可以在主表控件的某個事件處理(例如FormView的DataBound事件)中設置參數值
下面的例子演示了這種技術
<script runat=
server
>
Protected Sub FormView
_DataBound(ByVal sender As Object
ByVal e As System
EventArgs)
OrderDetailsDataSource
SelectParameters(
OrderID
)
DefaultValue = FormView
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>
</asp:SqlDataSource>
下面的例子演示了類似的技術
它使用的是DataList
處理DataList的ItemDataBound事件來設置數據源參數值
<script runat=
server
>
Protected Sub DataList
_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>
From:http://tw.wingwit.com/Article/program/net/201311/11614.html