广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-04 08:34:40 次阅读 稿源:互联网
    广告

      在前面的文章中,我们已经知道如何将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>
      </asp: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>

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告