ASP.NET 2.0的FormView控件类似于DetailsView控件,因为它能方便地显示后端数据源的单个记录。本文将讨论这个控件的语法和应用。
用户化
虽然这两个控件一次显示一条记录,DetailsView和FormView的关键差别在于:FormView利用用户定义的模板;而 DetailsView则使用行字段。FormView控件没有预先定义数据布局;相反,你建立一个包含控件的模板来显示记录中的单个字段。模板中包含建立表单所要用到的格式、控件和绑定表达式。
你可以控制数据记录以三种形式显示:编辑、查看和添加一条新记录。另外,你可以包括和格式化标题与页脚元素。你还可以利用FormView控件各个部分中的任何一个有效的ASP.NET 2.0的FormView控件。
语法
宣称和使用一个FormView控件实例与宣称和使用一个DetailsView控件实例非常相似。它们的主要区别是,因为没有默认设置可以使用,你必须在FormView控件中包含显示数据的格式和模板。列表A显示了打开FormView元素标签的一部分语法。
你可能已经注意到,许多属性和HTML表格元素相对应,如标题和边框。这说明ASP.NET使用HTML表格来呈现FormView控件。
你可以通过微软网站在线查看一个更加全面的FormView控件属性列表。下表列出了一些值得关注的重要属性。
AllowPaging:一个说明用户能否对指定数据源中的记录分页的布尔值。如果设为真,则在所显示记录的底部显示默认的分页数字系统(从1到记录的数量)。分页链接可以通过各种分页属性自定义。
DataKeyNames:数据源的键字段。
DataSourceID:用来移植FormView控件数据源元素ID。如果使用SQL Server,它与分配给SqlDataSource元素的ID对应。
DefaultMode:允许你指定控件的默认行为。也就是说,在用户访问时,它最初如何显示。可能的值包括:ReadOnly、Insert和Edit。
EmptyDataText:遇到空数据值时显示的文本。
宣称FormView控件时,还必须对它的内容进行相应格式化。它的数据通过模板显示。FormView控件主要使用五个模板:
ItemTemplate:它控制用户查看数据时的显示情况。
EditItemTemplate:它决定用户编辑记录时的格式和数据元素的显示情况。在这个模板内,你将使用其它控件,如TextBox元素,允许用户编辑值。
InsertItemTemplate:与编辑一条记录相似,这个模板控制允许用户在后端数据源中添加一条新记录的字段的显示。由于输入了新的值,应该根据数据的要求允许用户自由输入文本或限制某些值。
FooterTemplate:决定FormView控件表格页脚部分显示的内容,如果有的话。
HeaderTemplate:决定FormView控件表格标题部分显示的内容,如果有的话。
这些模板允许你控制绑定到一个FormView控件的数据的显示和行为。例如,列表B中的ASP.NET Web表单连接到标准的Northwind数据库,允许用户通过名字、姓、雇用日期和家庭电话号码字段查看、编辑、删除和添加新的员工记录。
它使用TextField控件显示被编辑或添加的数据,以及只是为了查阅而显示的值。ItemTemplate使用CSS格式化表格,而InsertTemplate则使用HTML样式进行格式化,到底使用哪种方法由开发者决定。
注:ASP.NET用Button控件添加、编辑、删除和保存记录。
在Button控件中,New的CommandName值将记录转换为插入模式并加载InsertItemTemplate模板,它允许用户输入一个新记录值。你可以用Edit的CommandName值给ItemTemplate增加一个新按钮,使FormView控件进入编辑模式。
可以给ItemTemplate模板增加一个带Delete的CommnadName值的按钮,允许用户从数据源中删除当前记录。Update的CommnadName保存数据,而Cancel终止操作。
开发者控制
ASP.NET 2.0的FormView控件令人惊喜。FormView对DetailsView的简单功能进行了扩张,允许你根据需要轻松控制要格式化的显示内容。这个新控件为你交付解决方案提供另一个选项。
- <asp:FormViewAllowPagingasp:FormViewAllowPaging="True|False"BackColor=
"color name|#dddddd"BorderColor="color name|#dddddd"- BorderStyle="NotSet|None|Dotted|Dashed|Solid|Double|Groove|Ridge|Inset|
Outset"BorderWidth="size"- Caption="string"CaptionAlign="NotSet|Top|Bottom|Left|Right"CellPadding=
"integer"CellSpacing="integer"CssClass="string"DataKeyNames="string"
DataSourceID="string"DefaultMode="ReadOnly|Edit|Insert"EmptyDataText="string"- Enabled="True|False"GridLines="None|Horizontal|Vertical|Both"runat=
"server"SkinID="string"- Style="string"
- Visible="True|False">
- <%@ Page Language="C#" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>FormView Example</title>
- </head><body>
- <form id="frmFormViewExample" runat="server">
- <asp:SqlDataSource
- ID="fvExample"
- ConnectionString="Server=localhost;Database=Northwind;Trusted_Connection=true"
SelectCommand="SELECT EmployeeID, LastName, FirstName, HomePhone, HireDate FROM
Employees" Runat="Server" UpdateCommand="UPDATE Employees SET LastName=@LastName,
FirstName=@FirstName, HomePhone=@HomePhone, HireDate=@HireDate WHERE
EmployeeID=@EmployeeID" DeleteCommand="DELETE FROM Employees WHERE
EmployeeID=@EmployeeID"InsertCommand="INSERT INTO Employees (LastName,
FirstName, HomePhone, HireDate) VALUES (@LastName, @FirstName, @HomePhone, @HireDate)" />- <div>
- <asp:FormView ID="EmpDetails" runat="server" DataKeyNames="Employeeid"
DataSourceId="fvExample" AllowPaging="true">- <ItemTemplate>
- <table style="font-family: Sans Serif; font-size: medium;">
- <tr><td colspan="2" style="background: gray; font-weight: bold;">
- <%# Eval("LastName") + ", " + Eval("FirstName") %></td></tr>
- <tr><td>ID</td>
- <td><%# Eval("EmployeeID") %></td></tr>
- <tr><td>Phone</td>
- <td><%# Eval("HomePhone") %><br></td></tr>
- <tr><td>Hired</td>
- <td><%# Eval("HireDate", "") %><br></td></tr>
- <tr><td colspan="2">
- <asp:Button ID="btnEdit" CommandName="Edit" Text="Edit" runat="server"/>
- <asp:Button ID="btnDelete" CommandName="Delete" Text="Delete" runat="server"/>
- <asp:Button ID="btnAdd" CommandName="New" Text="New" runat="server"/></td></tr>
- </table>
- </ItemTemplate>
- <EditItemTemplate>
- <table>
- <tr><td>ID</td>
- <td><%# Eval("EmployeeID") %><br></td></tr>
- <tr><td>Last Name</td>
- <td><asp:TextBoxRunatasp:TextBoxRunat="server" ID="TextBox2" Text='
<%# Bind("LastName") %>' /></td>- </tr>
- <tr><td>First Name</td>
- <td><asp:TextBoxRunatasp:TextBoxRunat="server" ID="FirstName" Text='
<%# Bind("FirstName") %>' /></td>- </tr>
- <tr><td>Phone</td>
- <td><asp:TextBoxRunatasp:TextBoxRunat="server" ID="txtPhone" Text='
<%# Bind("HomePhone") %>' /></td>- </tr>
- <tr><td>Hire Date</td>
- <td><asp:TextBoxRunatasp:TextBoxRunat="server" ID="txtHireDate" Text='
<%# Bind("HireDate") %>' /></td></tr>- <tr><td colspan="2">
- <asp:Button ID="btnUpdate" CommandName="Update" Text="Update Employee"
runat="server"/>- <asp:Button ID="btnCancel" CommandName="Cancel" Text="Cancel" runat=
"server"/></td></tr></table>- </EditItemTemplate>
- <InsertItemTemplate>
- <table>
- <tr><td><b>Last Name</b></td>
- <td><asp:TextBoxRunatasp:TextBoxRunat="server" ID="TextBox1" Text='
<%# Bind("HomePhone") %>' /></td></tr>- <tr><td><b>First Name</b></td>
- <td><asp:TextBoxRunatasp:TextBoxRunat="server" ID="FirstName" Text='
<%# Bind("FirstName") %>' /></td></tr>- <tr><td><b>Home Phone</b></td>
- <td><asp:TextBoxRunatasp:TextBoxRunat="server" ID="txtHomePhone2" Text='
<%# Bind("HomePhone") %>' /></td></tr>- <tr><td><b>Hired</b></td>
- <td><asp:TextBoxRunatasp:TextBoxRunat="server" ID="txtHireDate2" Text='
<%# Bind("HireDate") %>' /></td></tr>- <tr><td colspan="2">
- <asp:Button ID="btnInsert" CommandName="Insert" Text="Save" runat="server"/>
- <asp:Button ID="btnCancel2" CommandName="Cancel" Text="Cancel" runat=
"server"/></td></tr>- </table>
- </InsertItemTemplate>
- </asp:FormView>
- </div></form></body></html>
【编辑推荐】