首页 > 编程 > .NET > 正文

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

2024-07-10 13:09:13
字体:
来源:转载
供稿:网友
  在前面的文章中,我们已经知道如何将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>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表