asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP.NET 2.0高级数据处理之主从数据表


发布日期:2021年10月08日
 
ASP.NET 2.0高级数据处理之主从数据表
在前面的文章中我们已经知道如何将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>               

上一篇:ASP.NET 2.0服务器控件之验证控件示例

下一篇:优化HTTP前端请求构建高性能ASP.NET站点