主要控件
DetailsView 和 FormView控件在显示后端数据源中的单个记录时功能强大但是强迫用户在一页中显示无数条记录这很不现实为此我们可以将GridView控件和DetailsView或FormView控件结合在一起来让用户从GridView控件中选择单个列然后利用DetailsView或FormView控件来浏览或操纵其中的内容因此GridView是主要控件而细节则是通过其他控件显示的
这种方法的第一步是设法可以选择GridView控件中的单个行(例如可以允许用户选择一行显示在其它控件中)此外GridView控件的SelecterStyle属性可以显式的设定所选行的风格从而用户知道或可以很容易的记住当前选择的是哪一行
可以使用一个命令域来辅助行选择CommandField对象的ShowSelectButton属性使得该对象成为行选择的对象CommandField的ButtonType属性允许你控制如何进行选择当选定一行时GridView控件的DataKeyName属性指名分配给选定项的值该值可能通过选择事件传递给其他控件
当单击GridView中某行的选择按钮时随即发生返回且更新GridView的SelectedRow属性除了SelectedRow属性外GridView控件还提供了SelectedIndexSelectedValue 和SelectedDataKey属性SelectedIndex属性返回选定行的索引而SelectedValue和SelectedDatakey属性返回基于GridView的DataKeyNames属性的值
细节
既然已经设定好主要的GridView控件下一步就可以添加一个DetailsView或FormView控件来显示选定行中的数据在我们的例子中DetailsView控件将被添加到GridView所在的页面中此外DetailsView需要一个数据源因此要求另外一个SQL Server数据源我们想显示GridView控件中选定行中的数据所以需要传递所选行的ID
演示GridView控件与其它数据控件相结合应用的最好方式就是利用实例代码下面的GridView控件连接到SQL Servcer显示Northwind数据库中数据这里使用了三个控件DropDownListGridView和DetailsView
用户可以使用DropDownList控件指定加载到GridView控件中的数据用户选择某个城市响应员工的数据就被加载因此当在GridView控件中通过显示为链接标签的命令按钮选择了某个记录后指定员工的详细信息将会显示在DetailsView控件中同时选定行呈黄色高亮状态从而用户可以容易的识别选择的是哪一行
代码中使用了三个SqlDataSource对象用于为每个控件加载数据GridView控件使用了来自DropDownList控件的SQL中的选定值这是通过将来自DropDownList控件的值利用SqlDataSource控件的SelectParameters属性传递给SQL的见列表A所示
你可以使用ControlParameter对象通过指定你想使用的数据的ID和属性来获得表单上其它控件中的数据同时当传递SelectedValue属性时键值也通过ControlParameter对象从GridView传递到DetailView控件GridView中选定行的SelectedValue使用指定给GridView控件的DataKeyNames值被赋值此外为了从控件获得数据你还可以使用来自QuerySringcookies和很多其它选项的数据
列表B中包括了拥有三个控件和用于数据加载的对象全部源代码本例演示了使用数据控件操纵数据而不用编写任何代码每个控件提供了大量的事件可用来为这些事件编写代码实现本文的同样任务和更多其它任务
更多强大接口
ASPNET 包括大量以GridView为代表的数据控件我们使用这些控件可以很容易地显示来自后端数据源中的数据你还可以将GridView控件和其它的像DetailsView或FormView控件结合起来使用来操纵更多的数据对象以及在一个表单域或单独一个表单中显示要编辑或浏览的数据
<asp:SqlDataSource ID=ds runat=server SelectCommand=SELECT EmployeeID LastName FirstName Region FROM Employees WHERE (City=@City) ConnectionString=Server=localhost;Database=Northwind;Trusted_Connection=true>
<SelectParameters>
<asp:ControlParameterControlID=DropDownList Name=City PropertyName=SelectedValue Type=String />
</SelectParameters>
</asp:SqlDataSource>
<%@ Page Language=C# %>
<html>
<head id=Head runat=server>
<title>MasterDetail Page Example</title>
</head><body>
<form id=frmMasterDetail runat=server>
<b>Select a city:</b>
<asp:DropDownList ID=DropDownList DataSourceID=SqlDataSource AutoPostBack=trueDataTextField=City runat=server />
<asp:SqlDataSource ID=SqlDataSource runat=server SelectCommand=SELECT DISTINCT City FROM Employees
ConnectionString=Server=localhost;Database=Northwind;Trusted_Connection=true />
<asp:GridView ID=GridView AllowSorting=True AllowPaging=True runat=server DataSourceID=SqlDataSource DataKeyNames=EmployeeID AutoGenerateColumns=False Width=px PageSize= BackColor=#ccc BorderColor=black BorderStyle=Groove BorderWidth= Caption=GridView Example>
<SelectedRowStyleBackColor=yellow />
<Columns>
<asp:CommandFieldShowSelectButton=True />
<asp:BoundFieldDataField=EmployeeID HeaderText=ID ReadOnly=True SortExpression=EmployeeID />
<asp:BoundFieldDataField=LastName HeaderText=Last SortExpression=LastName />
<asp:BoundFieldDataField=FirstName HeaderText=First SortExpression=FirstName />
<asp:BoundFieldDataField=Region HeaderText=Region SortExpression=Region />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID=SqlDataSource runat=server SelectCommand=SELECT EmployeeID LastName FirstName Region FROM Employees WHERE (City=@City)
ConnectionString=Server=localhost;Database=Northwind;Trusted_Connection=true>
<SelectParameters>
<asp:ControlParameterControlID=DropDownList Name=City PropertyName=SelectedValue Type=String />
</SelectParameters>
</asp:SqlDataSource>
<asp:DetailsViewAutoGenerateRows=False DataKeyNames=EmployeeID DataSourceID=SqlDataSourceHeaderText=Employee Details ID=DetailsView runat=server Width=px>
<Fields>
<asp:BoundFieldDataField=EmployeeID HeaderText=ID ReadOnly=True />
<asp:BoundFieldDataField=LastName HeaderText=Last />
<asp:BoundFieldDataField=FirstName HeaderText=First />
<asp:BoundFieldDataField=Region HeaderText=Region />
</Fields>
</asp:DetailsView>
<asp:SqlDataSource ConnectionString=Server=localhost;Database=Northwind;Trusted_Connection=true ID=SqlDataSource
runat=server SelectCommand=SELECT EmployeeID LastName FirstName Region FROM Employees WHERE (EmployeeID = @EmployeeID)>
<SelectParameters>
<asp:ControlParameterControlID=GridView Name=EmployeeID PropertyName=SelectedValue Type=String />
</SelectParameters>
</asp:SqlDataSource>
</form></body></html>