在上星期,我介绍了ASP.NET 2.0中的GridView(网格视图)数据控件,并阐述了使用它的基本方法。这一周,我将更进一步,就如何处理控件所包含的数据的操作细节作些探讨。这些操作包括查看、编辑,以及删除数据。
让人感激不尽的是,GridView控件让我们使用这些特性时感到轻而易举。在我们深入这些主题之前,我要首先来检查一下,看看GridView控件可以支持哪几类不同的字段控件类别(field type)。
支持的字段类别
GridView控件支持下列字段控件:
- BoundField控件:以字符串的方式显示该字段数据。
- ButtonField控件:显示一个用户定义的按钮。
- CheckField控件:字段值如果是布尔值,显示复选框(checkbox)。
- CommandField控件:自动产生一个命令按钮,如编辑(Edit)、更新(Update),以及取消(Cancel)按钮。
- HyperLinkField控件:把字段值显示为超级链接(hyperlink)。
- ImageField控件:当字段值指向某图片时,则自动显示该图片。
- TemplateField控件:允许用户使用模板定制其他控件的外观。
使用这些类型的控件字段,你可以掌控它们的外观,并且对于这些和GridView控件绑定的数据以及其它元素,你能够获得一种良好体验。列表 A所示的GridView控件,显示了由BoundField元素附属的查询方法得到的数据。
如果你要显示的控件字段是图片、按钮,或者超级链接,那么可以使用相应的字段类别,不过,TemplateField类别让你可以自定义字段的外观。它的语法实现如下:
<asp:TemplateField
HeaderStyle-property="value"
ItemStyle-property="value"
FooterStyle-property="value">
<HeaderTemplate>
HTML, text or server controls
</HeaderTemplate>
<ItemTemplate>
HTML, text or server controls
</ItemTemplate>
<AlternatingItemTemplate>
HTML, text or server controls
</AlternatingItemTemplate>
<FooterTemplate>
HTML, text or server controls
</FooterTemplate>
</asp:TemplateField>
对于那些以前使用过ASP.NET 1.x的模板字段的人,这种方法并不新奇。列表 B是通过TemplateField显示数据的一个可能用法的示例。字段的格式制定和显示方法有各种选项可选,很容易做到满足用户的不同要求。
数据的编辑
除了让用户可以查看和筛选数据外,另一个普遍的需求便是编辑数据。GridView数据控件使这变得简单,方法是利用它的AutoGenerateEditButton属性和关联的数据库连接的UpdateCommand属性。
当/如果用户编辑并保存数据时,sqlDataSource元素将提供UpdateCommand属性来定义所用的 SQL。这需要通过DataSourceID属性(定位到sqlDataSource)来绑定到GridView控件的编辑功能。同时, sqlDataSource元素的DataKeyNames属性用于指定GridView内数据行的主键和键值数组。列表 C是使用这种方法编辑和更新GridView数据的示例。
数据的删除
和编辑功能一样,GridView控件也简化了用户从GridView控件中删除单个数据行的操作。同样,为了控制删除的执行,这里需要sqlDataSource控件和DeleteCommand属性互相配合。
GridView控件的AutoGenerateDeleteButton属性通知系统生成一个删除按钮(其值为真 时),或者不生成按钮(其值为假时)。当用户选中删除按钮时,所选中行数据的值将被送到sqlDataSource的DeleteCommand属性定义 的SQL命令语句中执行。列表 D把删除功能引入进来,对上面的例子作了扩展。
易于使用的特性
ASP.NET 1.x的DataGrid控件功能强大,但具体实施却颇费时间。ASP.NET 2.0的功能性和可扩展性同样强大,但复杂度却大大下降。你只要把它和新的sqlDataSource控件组合一起,就可以马上获得这些强大特性。你不需 要编写C#或者VB.NET代码就可以实现数据的访问。
你是不是已经更新换代,使用最新版的.NET Framework了呢?如果是,分享一下你使用的体会;如果还没有,就请说说没有更换的原因。
Tony Patton作为应用程序开发员,有着Java、VB、Lotus,以及XML的各项认证。
<html><head runat="server"> <title>Display GridView</title> </head><body> <form id="frmGridViewExample2" runat="server"> <asp:GridView DataSourceID="gvExample" Runat="Server" AllowSorting="True" AllowPaging="True" PageSize="10" AutoGenerateColumns="False" BackColor="#c0c0c0" BorderColor="black" BorderStyle="Groove" BorderWidth="5" Caption="GridView Example" /> <asp:SqlDataSource ID="gvExample" ConnectionString="Server=localhost;Database=Northwind;Trusted_Connection=true" SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees" Runat="Server"> <Columns> <asp:BoundField DataField="EmployeeID" NullDisplayText="---" ReadOnly="True" /> <asp:BoundField DataField="LastName" NullDisplayText="--" /> <asp:BoundField DataField="FirstName" NullDisplayText="---" /> </Columns> </asp:GridView> </form></body></html> <html><head runat="server"> <title>Display GridView</title> </head><body> <form id="frmGridViewExample2" runat="server"> <asp:GridView DataSourceID="gvExample" Runat="Server" AllowSorting="True" AllowPaging="True" PageSize="10" AutoGenerateColumns="False" BackColor="#c0c0c0" BorderColor="black" BorderStyle="Groove" BorderWidth="5" Caption="GridView Example" /> <asp:SqlDataSource ID="gvExample" ConnectionString="Server=localhost;Database=Northwind;Trusted_Connection=true" SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees" Runat="Server"> <Columns> <ItemTemplate HeaderText="Employee#v> <asp:Label Runat="Server" ForeColor="Red" Font-Bold="True" Text='<%# Eval("EmployeeID") %>'/> </ItemTemplate> <asp:BoundField DataField="LastName" NullDisplayText="--" /> <asp:BoundField DataField="FirstName" NullDisplayText="---" /> </Columns> </asp:GridView> </form></body></html> <html><head runat="server"> <title>GridView Edit</title> </head><body> <form id="frmGridViewEditExample" runat="server"> <asp:GridView DataSourceID="gvExample" AutoGenerateEditButton="true" Runat="Server" AllowSorting="True" AllowPaging="True" PageSize="10" AutoGenerateColumns="False" BackColor="#c0c0c0" BorderColor="black" BorderStyle="Groove" BorderWidth="5" Caption="GridView Edit Example" /> <asp:SqlDataSource ID="gvExample" ConnectionString="Server=localhost;Database=Northwind;Trusted_Connection=true" SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees" UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName WHERE EmployeeID=@EmployeeID" Runat="Server"> <Columns> <asp:BoundField DataField="EmployeeID" NullDisplayText="unknown" ReadOnly="True" /> <asp:BoundField DataField="LastName" NullDisplayText="unknown" /> <asp:BoundField DataField="FirstName" NullDisplayText="unknown" /> </Columns> </asp:GridView> </form></body></html> <html><head runat="server"> <title>GridView Delete</title> </head><body> <form id="frmGridViewDeleteExample" runat="server"> <asp:GridView DataSourceID="gvExample" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" Runat="Server" AllowSorting="True" AllowPaging="True" PageSize="10" AutoGenerateColumns="False" BackColor="#c0c0c0" BorderColor="black" BorderStyle="Groove" BorderWidth="5" Caption="GridView Delete Example" /> <asp:SqlDataSource ID="gvExample" ConnectionString=”Server=localhost;Database=Northwind;Trusted_Connection=true” SelectCommand=”SELECT EmployeeID, LastName, FirstName FROM Employees” UpdateCommand=”UPDATE Employees SET LastName=@LastName, FirstName=@FirstName WHERE EmployeeID=@EmployeeID" DeleteCommand=”DELETE Employees WHERE EmployeeID=@EmployeeID” Runat="Server"> <Columns> <asp:BoundField DataField="EmployeeID" NullDisplayText="unknown" ReadOnly="True" /> <asp:BoundField DataField="LastName" NullDisplayText="unknown" /> <asp:BoundFieldDataField="FirstName" NullDisplayText="unknown" /> </Columns> </asp:GridView> </form></body></html>