为 FormView Web 服务器控件创建模板

更新:2007 年 11 月

您可以自定义 FormView 控件,方法是添加允许用户对此控件显示的数据进行查看或修改的模板。每个模板的内容包括标记、带有数据绑定表达式的控件和更改 FormView 控件的模式的命令按钮。

ms227423.alert_note(zh-cn,VS.90).gif说明:

有关数据绑定表达式的更多信息,请参见数据绑定表达式概述

显示模板

FormView 控件的主要显示模板是 ItemTemplate 模板。ItemTemplate 模板以只读模式显示绑定的数据。ItemTemplate 包含的控件是只显示数据的控件,例如 Label 控件。模板还可以包含命令按钮,用于将 FormView 控件的模式更改为插入或编辑模式,或删除当前记录。可使用包含用于单向数据绑定的 Eval 方法的数据绑定表达式将模板中的控件绑定到数据,如下面的示例所示。

<asp:FormView ID="FormView1"
  DataSourceID="SqlDataSource1"
  DataKeyNames="ProductID"     
  RunAt="server">

  <ItemTemplate>
    <table>
      <tr><td align="right"><b>Product ID:</b></td>       <td><%# Eval("ProductID") %></td></tr>
      <tr><td align="right"><b>Product Name:</b></td>     <td><%# Eval("ProductName") %></td></tr>
      <tr><td align="right"><b>Category ID:</b></td>      <td><%# Eval("CategoryID") %></td></tr>
      <tr><td align="right"><b>Quantity Per Unit:</b></td><td><%# Eval("QuantityPerUnit") %></td></tr>
      <tr><td align="right"><b>Unit Price:</b></td>       <td><%# Eval("UnitPrice") %></td></tr>
    </table>                 
  </ItemTemplate>                   
</asp:FormView>
<asp:FormView ID="FormView1"
  DataSourceID="SqlDataSource1"
  DataKeyNames="ProductID"     
  RunAt="server">

  <ItemTemplate>
    <table>
      <tr><td align="right"><b>Product ID:</b></td>       <td><%# Eval("ProductID") %></td></tr>
      <tr><td align="right"><b>Product Name:</b></td>     <td><%# Eval("ProductName") %></td></tr>
      <tr><td align="right"><b>Category ID:</b></td>      <td><%# Eval("CategoryID") %></td></tr>
      <tr><td align="right"><b>Quantity Per Unit:</b></td><td><%# Eval("QuantityPerUnit") %></td></tr>
      <tr><td align="right"><b>Unit Price:</b></td>       <td><%# Eval("UnitPrice") %></td></tr>
    </table>                 
  </ItemTemplate>                 
</asp:FormView>

ItemTemplate 模板可包含 LinkButton 控件,此控件基于 CommandName 值更改 FormView 控件的模式。CommandName 值为 New 时,将使记录进入插入模式并加载允许用户为新记录输入值的 InsertItemTemplate 模板。可将 CommandName 值为 Edit 的按钮添加到 ItemTemplate 模板,以使 FormView 控件进入编辑模式。可将 CommandName 值为 Delete 的控件添加到 ItemTemplate 模板,以允许用户从数据源中删除当前记录。

可用于 FormView 控件的其他显示模板为 EmptyDataTemplate 模板(在当前没有绑定的记录时显示)、HeaderTemplate 模板和 FooterTemplate 模板(后两者分别用于定义标头和脚注的内容)。

编辑和插入模板

可使用 EditItemTemplate 模板来允许用户修改现有的记录,以及使用 InsertItemTemplate 模板来收集要插入到数据源中的新记录的值。EditItemTemplateInsertItemTemplate 模板通常包含获取用户输入的控件,如 TextBoxCheckBoxDropDownList 控件。还可以添加控件来显示只读信息,以及添加命令按钮来允许用户编辑当前记录、插入新记录或撤销当前操作。可将 EditItemTemplateInsertItemTemplate 模板中的控件绑定到数据,方法是使用包含用于双向数据绑定的 Bind 方法的数据绑定表达式,如下面的示例所示。

<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource" 
  SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"

  InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName); 
                 SELECT @EmpID = SCOPE_IDENTITY()"
  UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName 
                   WHERE EmployeeID=@EmployeeID"
  DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"

  ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
  OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
  RunAt="server">

  <SelectParameters>
    <asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
  </SelectParameters>

  <InsertParameters>
    <asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
  </InsertParameters>

</asp:sqlDataSource>
<asp:sqlDataSource ID="EmployeeDetailsSqlDataSource" 
  SelectCommand="SELECT EmployeeID, LastName, FirstName FROM Employees WHERE EmployeeID = @EmpID"

  InsertCommand="INSERT INTO Employees(LastName, FirstName) VALUES (@LastName, @FirstName); 
                 SELECT @EmpID = SCOPE_IDENTITY()"
  UpdateCommand="UPDATE Employees SET LastName=@LastName, FirstName=@FirstName 
                   WHERE EmployeeID=@EmployeeID"
  DeleteCommand="DELETE Employees WHERE EmployeeID=@EmployeeID"

  ConnectionString="<%$ ConnectionStrings:NorthwindConnection %>"
  OnInserted="EmployeeDetailsSqlDataSource_OnInserted"
  RunAt="server">

  <SelectParameters>
    <asp:Parameter Name="EmpID" Type="Int32" DefaultValue="0" />
  </SelectParameters>

  <InsertParameters>
    <asp:Parameter Name="EmpID" Direction="Output" Type="Int32" DefaultValue="0" />
  </InsertParameters>

</asp:sqlDataSource>
ms227423.alert_note(zh-cn,VS.90).gif说明:

使用 ListControl 控件(如 DropDownList 控件)时,您可能需要将 DropDownList 控件的值绑定到当前绑定记录的某个字段,而将 DropDownList 控件的列表值绑定到单独的可能值列表。在这种情况下,使用 Bind 表达式将 DropDownList 控件的 SelectedValue 属性绑定到当前绑定记录,并将 DropDownList 控件的数据源、DataTextField 属性以及 DataValueField 属性指定给可能值列表。

当用户单击 CommandName 值为 Edit 的命令按钮时,将加载 EditItemTemplate 模板。可添加 CommandName 值为 Update 的 LinkButton 命令按钮,以获取当前绑定值并将其发送到要更新的数据源控件。可添加 CommandName 值为 Cancel 的 LinkButton 命令按钮来放弃当前绑定值,使 FormView 控件返回到只读模式以及加载 ItemTemplate 模板。

当用户单击 CommandName 值为 New 的命令按钮时,将加载 InsertItemTemplate 模板。可添加 CommandName 值为 Insert 的 LinkButton 命令按钮,以将新记录的值发送到数据源控件。可添加 CommandName 值为 Cancel 的 LinkButton 命令按钮来放弃新的值,将 FormView 返回到只读模式以及加载 ItemTemplate 模板。

有关使用 FormView 控件编辑数据的示例,请参见使用 FormView Web 服务器控件修改数据

数据分页模板

FormView 控件中,一个数据页就是一个绑定记录。如果将 FormView 控件的 AllowPaging 属性设置为 true,则 FormView 控件可自动添加用于分页的用户界面 (UI) 控件。可以通过添加 PagerTemplate 模板来自定义用于分页的用户界面。有关详细信息,请参见在 FormView Web 服务器控件中分页

有关 FormView 控件的 PagerTemplate 模板的示例,请参见在 FormView Web 服务器控件中分页

请参见

概念

FormView Web 服务器控件概述