「主/明细」资料表常用来显示关联数据表间的数据。例如在myweb 数据库中有两个有关联的数据表,分别为会员数据表以及订单数据表;会员数据表中记录了基本的会员数据,而订单数据表记录了会员所下的订单。我们可以透过一个datagrid web控件将这个会员数据表呈现出来后,点选我们所要检视的会员;此时该会员所下过的订单细目就会列在另一个datagred web 控件中,如下图所示:

要达到这个功能,只要利用datagrid web 控件的onitemcommand 事件就可以办到。我们将主数据表的使用者名称以buttoncolumn 来呈现,这样使用者在这个字段上点选时,就会触发onitemcommand 事件;我们就可以透过这个事件取得使用者所点选的记录,并设定好条件将子记录从数据源取回后呈现在明细数据表上:
<%@import namespace=system.data.ado%>
<%@import namespace=system.data%>
<html>
<form runat="server">
<asp:datagrid id="dga" allowpaging="true" pagesize="5"
onpageindexchanged="dga_pagechg"
runat="server"
pagerstyle-mode="numericpages"
bordercolor="#808080"
headerstyle-font-names="courier new"
headerstyle-backcolor="#d1dceb"
headerstyle-font-bold="true"
headerstyle-horizontalalign="center"
autogeneratecolumns="false"
onitemcommand="dga_icmd">
<property name="columns">
<asp:buttoncolumn
headertext="姓名" datatextfield="username"/>
<asp:boundcolumn
headertext="电话" datafield="usertel"/>
<asp:boundcolumn
headertext="住址" datafield="useradd"/>
<asp:boundcolumn
headertext="电邮" datafield="useremail"/>
</property>
</asp:datagrid><br>
<asp:datagrid id="dgb" runat="server"
pagerstyle-mode="numericpages"
bordercolor="#808080"
headerstyle-font-names="courier new"
headerstyle-backcolor="#d1dceb"
headerstyle-font-bold="true"
headerstyle-horizontalalign="center"
autogeneratecolumns="false">
<property name="columns">
<asp:boundcolumn
headertext="日期" datafield="orderdate"/>
<asp:boundcolumn
headertext="产品名称" datafield="productname"/>
<asp:boundcolumn
headertext="单价" datafield="unitprice"/>
<asp:boundcolumn
headertext="数量" datafield="quantity"/>
<asp:boundcolumn
headertext="小计" datafield="total"/>
</property>
</asp:datagrid>
</form>
<asp:label id="label1" runat="server"/>
<script language="vb" runat="server">
dim dsca as adodatasetcommand=new adodatasetcommand("select * from
members", _
"provider=microsoft.jet.oledb.4.0;data
source=c:\inetpub\wwwroot\cr\ch08\myweb.mdb")
dim dsdataset as dataset=new dataset
sub page_load(sender as object, e as eventargs)
if page.ispostback=false then
dsca.selectcommand.commandtext="select * from members"
dsca.filldataset(dsdataset, "members")
dga.datasource=dsdataset.tables("members").defaultview
dga.databind()
end if
label1.text="您目前没有点选任何记录."
end sub
sub dga_pagechg(sender as object, e as datagridpagechangedeventargs)
dsca.filldataset(dsdataset, "members")
dga.datasource=dsdataset.tables("members").defaultview
dga.databind()
dgb.visible=false
end sub
sub dga_icmd(sender as object, e as datagridcommandeventargs)
dim shtr as short=(dga.currentpageindex * dga.pagesize) +
e.item.itemindex
if shtr>=0 then
dsca.filldataset(dsdataset, "members")
dsca.selectcommand.commandtext="select * from orders where
userid='" & _
dsdataset.tables("members").rows(shtr)("userid") & "'"
dsca.filldataset(dsdataset, "orders")
dgb.datasource=dsdataset.tables("orders").defaultview
dgb.databind()
dgb.visible=true
label1.text="总共有" & dsdataset.tables("orders").rows.count & "
笔记录"
end if
end sub
</script>
</html>