10.7 建立主要与详细窗体
GridView和DetailsView 控件可以结合起来,建立主要与详细窗体(Master/Detail)。在主要窗体的 GridView 控件显示记录列表,包含选取超级链接列,单击,就可以在 DetailsView控件中显示单条记录的详细数据,如图10-19所示。

图10-19 Ch10-7.aspx运行结果
上图的左边是 GridView 控件,右边是 DetailsView 控件,单击指定记录行的“选取”超级链接文字,就可以在右边显示单条记录的详细数据。
1. 主要窗体的GridView控件
在 ASP.NET 程序中有 GridView 和 DetailsView 两个控件。主要窗体的数据源和 DataGrid 控件如下所示。
<asp:AccessDataSource Id="MasterSource" Runat="server"
DataFile="~/Products.mdb"
SelectCommand="SELECT * FROM Products"/>
<asp:GridView Id="master" Runat="server"
DataSourceID="MasterSource" BorderColor="black"
HeaderStyle-BackColor="#CC99FF"
AutoGenerateColumns="False"
AutoGenerateSelectButton="True"
DataKeyNames="ProductNo"
SelectedIndex="0">
<Columns>
<asp:BoundField HeaderText="书号"
DataField="ProductNo"/>
</Columns>
</asp:GridView>
上述 GridView 控件的数据源控件是 MasterSource,AutoGenerateSelectButton 属性为 True,可以自动创建“选取”超级链接字段,DataKeyNames 属性指定主键是 ProductNo,SelectedIndex 属性设置预先选取的数据行,0 就是第 1 条记录。
2. 详细窗体的DetailsView控件
详细窗体 DetailsView 控件和其数据源控件,如下所示。
<asp:AccessDataSource Id="DetailSource" Runat="server"
DataFile="~/Products.mdb"
SelectCommand="SELECT * FROM Products
WHERE ProductNo=@ProductNo">
<SelectParameters>
<asp:ControlParameter Name="ProductNo"
ControlID="master" PropertyName="SelectedValue"/>
</SelectParameters>
</asp:AccessDataSource>
<asp:DetailsView Id="detail" Runat="server"
DataSourceID="DetailSource" Width="350px"
………>
………
</asp:DetailsView>
在上述数据源控件SelectCommand属性的SQL查询命令中,添加WHERE子句的过滤条件,因为详细窗体只显示一条记录,参数@ProductNo值是由 <SelectParameter>标记来指定如何获取参数值。
在<SelectParameter>标记中可以使用ControlParameter控件来定义SQL命令参数,此例的参数名称是 ProductNo。ControlID属性指出参数值的来源控件,即主要窗体。PropertyName 属性设置使用来源控件的哪一个属性取代参数值。 GridView控件的 SelectedValue 属性可以获取目前选取记录的主键值。
完整ASP.NET程序范例是Ch10-7.aspx。Ch10-7Template.aspx是将 AutoGenerate SelectButton属性设为 False,使用TemplateField控件自行建立选取字段,如下所示。
<asp:TemplateField HeaderText="书号">
<ItemTemplate>
<asp:LinkButton Runat="server"
Text='<%# Eval("ProductNo")%>'
CommandName="Select"/>
</ItemTemplate>
</asp:TemplateField>
上述选取字段是使用LinkButton控件,以书号为标题名称,CommandName属性值Select表示选取记录。







