System.Web.UI.WebControls


.NET Framework 类库
DetailsView 类

注意:此类在 .NET Framework 2.0 版中是新增的。

在表中显示来自数据源的单条记录的值,其中每个数据行表示该记录的一个字段。DetailsView 控件允许您编辑、删除和插入记录。

命名空间:System.Web.UI.WebControls
程序集:System.Web(在 system.web.dll 中)

语法

Visual Basic(声明)
<ControlValuePropertyAttribute("SelectedValue")> _
Public Class DetailsView
    Inherits CompositeDataBoundControl
    Implements IDataItemContainer, INamingContainer, ICallbackContainer, ICallbackEventHandler, _
    IPostBackEventHandler, IPostBackContainer
Visual Basic(用法)
Dim instance As DetailsView
C#
[ControlValuePropertyAttribute("SelectedValue")] 
public class DetailsView : CompositeDataBoundControl, IDataItemContainer, INamingContainer, ICallbackContainer, 
    ICallbackEventHandler, IPostBackEventHandler, IPostBackContainer
C++
[ControlValuePropertyAttribute(L"SelectedValue")] 
public ref class DetailsView : public CompositeDataBoundControl, IDataItemContainer, INamingContainer, ICallbackContainer, 
    ICallbackEventHandler, IPostBackEventHandler, IPostBackContainer
J#
/** @attribute ControlValuePropertyAttribute("SelectedValue") */ 
public class DetailsView extends CompositeDataBoundControl implements IDataItemContainer, INamingContainer, 
    ICallbackContainer, ICallbackEventHandler, IPostBackEventHandler, IPostBackContainer
JScript
ControlValuePropertyAttribute("SelectedValue") 
public class DetailsView extends CompositeDataBoundControl implements IDataItemContainer, INamingContainer, 
    ICallbackContainer, ICallbackEventHandler, IPostBackEventHandler, IPostBackContainer
备注

DetailsView 控件用来在表中显示来自数据源的单条记录,其中记录的每个字段显示在表的一行中。它可与 GridView 控件结合使用,以用于主/详细信息方案。DetailsView 控件支持下面的功能:

  • 绑定至数据源控件,如 SqlDataSource

  • 内置插入功能。

  • 内置更新和删除功能。

  • 内置分页功能。

  • 以编程方式访问 DetailsView 对象模型以动态设置属性、处理事件等。

  • 可通过主题和样式进行自定义的外观。

行字段

DetailsView 控件中的每个数据行是通过声明一个字段控件创建的。不同的行字段类型确定控件中各行的行为。字段控件派生自 DataControlField。下表列出了可以使用的不同行字段类型。

列字段类型

说明

BoundField

以文本形式显示数据源中某个字段的值。

ButtonField

DetailsView 控件中显示一个命令按钮。这允许您显示一个带有自定义按钮(如“添加”或“移除”按钮)控件的行。

CheckBoxField

DetailsView 控件中显示一个复选框。此行字段类型通常用于显示具有布尔值的字段。

CommandField

DetailsView 控件中显示用来执行编辑、插入或删除操作的内置命令按钮。

HyperLinkField

将数据源中某个字段的值显示为超链接。此行字段类型允许您将另一个字段绑定到超链接的 URL。

ImageField

DetailsView 控件中显示图像。

TemplateField

根据指定的模板,为 DetailsView 控件中的行显示用户定义的内容。此行字段类型允许您创建自定义的行字段。

默认情况下,AutoGenerateRows 属性设置为 true,它为数据源中某个可绑定类型的每个字段自动生成一个绑定行字段对象。有效的可绑定类型包括 StringDateTimeDecimalGuid 以及基元类型集。每个字段然后以文本形式按其出现在数据源中的顺序显示在一行中。

自动生成行提供了一种显示记录中每个字段的快速简单的方式。但是,若要使用 DetailsView 控件的高级功能,您必须显式声明要包含在 DetailsView 控件中的行字段。若要声明行字段,请先将 AutoGenerateRows 属性设置为 false。接着,在 DetailsView 控件的开始和结束标记之间添加 <Fields> 开始和结束标记。最后,列出您想包含在 <Fields> 开始和结束标记之间的行字段。指定的行字段即以所列出的顺序添加到 Fields 集合中。Fields 集合允许您以编程方式管理 DetailsView 控件中的行字段。

Note注意

自动生成的行字段不会添加到 Fields 集合中。

Note注意

显式声明的行字段可与自动生成的行字段结合在一起显示。两者同时使用时,先呈现显式声明的行字段,再呈现自动生成的行字段。

绑定到数据

DetailsView 控件可绑定到数据源控件(如 SqlDataSourceAccessDataSource)或任何实现了 System.Collections.IEnumerable 接口的数据源(如 System.Data.DataViewSystem.Collections.ArrayListSystem.Collections.Hashtable)。使用下面的某个方法将 DetailsView 控件绑定到适当的数据源类型:

  • 若要绑定到某个数据源控件,请将 DetailsView 控件的 DataSourceID 属性设置为该数据源控件的 ID 值。DetailsView 控件自动绑定到指定的数据源控件。这是绑定到数据的首选方法。

  • 若要绑定到某个实现 System.Collections.IEnumerable 接口的数据源,请以编程方式将 DetailsView 控件的 DataSource 属性设置为该数据源,然后调用 DataBind 方法。

有关数据绑定的更多信息,请参见绑定到数据库

Security

此控件可用来显示用户输入,而该输入可能包含恶意的客户端脚本。在应用程序中显示从客户端发送来的任何信息之前,请检查它们是否包含可执行脚本、SQL 语句或其他代码。ASP.NET 提供输入请求验证功能以阻止用户输入中的脚本和 HTML。有关更多信息,请参见 脚本侵入概述。还提供验证服务器控件以判断用户输入。有关更多信息,请参见 验证服务器控件语法

数据操作

DetailsView 控件提供许多内置功能,这些功能使用户可以对控件中的项进行更新、删除、插入和分页。当 DetailsView 控件绑定到数据源控件时,DetailsView 控件可以利用该数据源控件的功能并提供自动更新、删除、插入和分页功能。

Note注意

DetailsView 控件可以为用其他类型的数据源进行更新、删除、插入和分页操作提供支持;但是,您必须在适当的事件处理程序中提供对这些操作的实现。有关更多信息,请参见 ItemDeletingItemInsertingItemUpdating

通过将 AutoGenerateEditButtonAutoGenerateDeleteButtonAutoGenerateInsertButton 属性分别设置为 trueDetailsView 控件可自动添加带有“编辑”、“删除”或“新建”按钮的 CommandField 行字段。与“删除”按钮(该按钮立即删除选择的记录)不同,单击“编辑”或“新建”按钮时,DetailsView 控件分别进入编辑模式或插入模式。在编辑模式下,“编辑”按钮会被“更新”和“取消”按钮替换。适合于字段的数据类型的输入控件(如 TextBoxCheckBox 控件)与字段的值一起显示以便用户进行修改。单击“更新”按钮更新数据源中的记录,而单击“取消”按钮则放弃所有更改。同样,在插入模式下,“新建”按钮会被“插入”和“取消”按钮替换,并显示空的输入控件以便用户为新记录输入值。

Note注意

也可在 ButtonFieldCommandFieldTemplateField 行字段中手动定义更新、删除和插入命令按钮。DetailsView 控件识别 CommandName 属性设置为“Edit”、“Update”、“Delete”、“New”、“Insert”或“Cancel”的按钮;但是,您自己仍需提供相应的功能。有关更多信息,请参见 ItemDeletingItemInsertingItemUpdating

DetailsView 控件提供分页功能,该功能使用户可导航到数据源中的其他记录。如果启用,页导航控件显示在页导航行中。若要启用分页,请将 AllowPaging 属性设置为 true。使用 PagerStylePagerSettings 属性可自定义页导航行。

自定义用户界面

您可以通过设置 DetailsView 控件的不同部分的样式属性来自定义该控件的外观。下表列出了不同的样式属性。

样式属性

说明

AlternatingRowStyle

DetailsView 控件中的交替数据行的样式设置。当设置了此属性时,数据行交替使用 RowStyle 设置和 AlternatingRowStyle 设置进行显示。

CommandRowStyle

DetailsView 控件中包含内置命令按钮的行的样式设置。

EditRowStyle

DetailsView 控件处于编辑模式时数据行的样式设置。

EmptyDataRowStyle

当数据源不包含任何记录时,DetailsView 控件中显示的空数据行的样式设置。

FooterStyle

DetailsView 控件的脚注行的样式设置。

HeaderStyle

DetailsView 控件的标题行的样式设置。

InsertRowStyle

DetailsView 控件处于插入模式时数据行的样式设置。

PagerStyle

DetailsView 控件的页导航行的样式设置。

RowStyle

DetailsView 控件中的数据行的样式设置。当还设置了 AlternatingRowStyle 属性时,数据行交替使用 RowStyle 设置和 AlternatingRowStyle 设置进行显示。

FieldHeaderStyle

DetailsView 控件的标题列的样式设置。

事件

DetailsView 控件提供多个您可以对其进行编程的事件。这使您可以在每次发生事件时运行一个自定义例程。下表列出了 DetailsView 控件支持的事件。DetailsView 控件还从其基类继承了下面的事件:DataBindingDataBoundDisposedInitLoadPreRenderRender

事件

说明

ItemCommand

当单击 DetailsView 控件中的按钮时发生。

ItemCreated

DetailsView 控件中创建了所有 DetailsViewRow 对象之后发生。此事件通常用于在显示记录前修改该记录的值。

ItemDeleted

在单击“删除”按钮时,但在 DetailsView 控件从数据源中删除该记录之后发生。此事件通常用于检查删除操作的结果。

ItemDeleting

在单击“删除”按钮时,但在 DetailsView 控件从数据源中删除该记录之前发生。此事件通常用于取消删除操作。

ItemInserted

在单击“插入”按钮时,但在 DetailsView 控件插入该记录之后发生。此事件通常用于检查插入操作的结果。

ItemInserting

在单击“插入”按钮时,但在 DetailsView 控件插入该记录之前发生。此事件通常用于取消插入操作。

ItemUpdated

在单击“更新”按钮时,但在 DetailsView 控件更新该行之后发生。此事件通常用于检查更新操作的结果。

ItemUpdating

在单击“更新”按钮时,但在 DetailsView 控件更新该记录之前发生。此事件通常用于取消更新操作。

ModeChanged

DetailsView 控件更改模式(编辑、插入或只读模式)之后发生。此事件通常用于在 DetailsView 控件更改模式时执行某项任务。

ModeChanging

DetailsView 控件更改模式(编辑、插入或只读模式)之前发生。此事件通常用于取消模式更改。

PageIndexChanged

在单击某一页导航按钮时,但在 DetailsView 控件处理分页操作之后发生。当您在用户定位到控件中不同的记录后需要执行任务时,通常使用此事件。

PageIndexChanging

在单击某一页导航按钮时,但在 DetailsView 控件处理分页操作之前发生。此事件通常用于取消分页操作。

辅助功能

默认情况下为此控件呈现的标记可能不符合 Web 内容辅助功能准则 1.0 (WCAG) 中优先级为 1 的准则等辅助功能标准。有关此控件的辅助功能支持的详细信息,请参见 ASP.NET 控件和辅助功能

TopicLocation
如何:动态创建 ASP.NET Web 服务器控件模板生成 ASP .NET Web 应用程序
如何:动态创建 ASP.NET Web 服务器控件模板在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:在模板化控件中绑定到数据生成 ASP .NET Web 应用程序
如何:在模板化控件中绑定到数据在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:绑定到 Visual Studio 的模板化控件中的数据在 Visual Studio 中构建 ASP .NET Web 应用程序
如何:绑定到 Visual Studio 的模板化控件中的数据在 Visual Studio 中生成 ASP .NET Web 应用程序
演练:使用 DetailsView 服务器控件在网页上编辑和插入数据在 Visual Studio 中构建 ASP .NET Web 应用程序
演练:使用 DetailsView 服务器控件在网页上编辑和插入数据在 Visual Studio 中生成 ASP .NET Web 应用程序
演练:在 Visual Studio 中创建主/详细信息网页在 Visual Studio 中构建 ASP .NET Web 应用程序
演练:在 Visual Studio 中创建主/详细信息网页使用 Visual Web Developer 生成应用程序
示例

下面的代码示例演示如何将 DetailsView 控件与 GridView 控件结合使用以实现简单的主/详细信息方案。它在 GridView 控件中显示选中项的详细信息。

Visual Basic
<%@ Page Language="VB" %>

<html>
<body>
  <form runat="server">
    <div>
      <table>
        <tr>
          <td>
            <asp:GridView ID="GridView1" runat="server" 
              AutoGenerateColumns="False" DataSourceID="Customers"
              DataKeyNames="CustomerID">
              <Columns>
                <asp:CommandField ShowSelectButton="True" />
                <asp:BoundField DataField="ContactName" HeaderText="ContactName" />
                <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" />
              </Columns>
            </asp:GridView>
          </td>
          <td valign="top">
            <asp:DetailsView ID="DetailsView1" runat="server" 
              AutoGenerateRows="True" DataKeyNames="CustomerID"
              DataSourceID="Details" Height="50px" Width="301px">
            </asp:DetailsView>
          </td>
        </tr>
      </table>
      &nbsp;&nbsp;
      <asp:SqlDataSource ID="Details" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
        SelectCommand="SELECT * FROM [Customers] WHERE ([CustomerID] = @CustomerID)">
        <SelectParameters>
          <asp:ControlParameter ControlID="GridView1" Name="CustomerID" 
            PropertyName="SelectedValue"
            Type="String" />
        </SelectParameters>
      </asp:SqlDataSource>
      <asp:SqlDataSource ID="Customers" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
        SelectCommand="SELECT [CompanyName], [ContactName], [CustomerID] FROM [Customers]">
      </asp:SqlDataSource>
    </div>
  </form>
</body>
</html>
C#
<%@ Page Language="C#" %>

<html>
<body>
  <form runat="server">
    <div>
      <table>
        <tr>
          <td>
            <asp:GridView ID="GridView1" runat="server" 
              AutoGenerateColumns="False" DataSourceID="Customers"
              DataKeyNames="CustomerID">
              <Columns>
                <asp:CommandField ShowSelectButton="True" />
                <asp:BoundField DataField="ContactName" HeaderText="ContactName" />
                <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" />
              </Columns>
            </asp:GridView>
          </td>
          <td valign="top">
            <asp:DetailsView ID="DetailsView1" runat="server" 
              AutoGenerateRows="True" DataKeyNames="CustomerID"
              DataSourceID="Details" Height="50px" Width="301px">
            </asp:DetailsView>
          </td>
        </tr>
      </table>
      &nbsp;&nbsp;
      <asp:SqlDataSource ID="Details" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
        SelectCommand="SELECT * FROM [Customers] WHERE ([CustomerID] = @CustomerID)">
        <SelectParameters>
          <asp:ControlParameter ControlID="GridView1" Name="CustomerID" 
            PropertyName="SelectedValue"
            Type="String" />
        </SelectParameters>
      </asp:SqlDataSource>
      <asp:SqlDataSource ID="Customers" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
        SelectCommand="SELECT [CompanyName], [ContactName], [CustomerID] FROM [Customers]">
      </asp:SqlDataSource>
    </div>
  </form>
</body>
</html>

下面的代码示例演示如何使用 DetailsView 控件添加、删除和编辑记录。

Visual Basic
<%@ Page Language="VB" %>

<script runat="server">
  Sub CustomerDetail_ItemInserted(ByVal sender As Object, _
    ByVal e As DetailsViewInsertedEventArgs)
    ' Refresh the GridView control after a new record is inserted in 
    ' the DetailsView control.
    CustomersView.DataBind()
  End Sub
  
  Sub CustomerDetail_ItemInserting(ByVal sender As Object, _
    ByVal e As DetailsViewInsertEventArgs)
    ' Iterate though the values entered by the user and HTML encode 
    ' the values. This helps prevent malicious values from being 
    ' stored in the data source.
    For i As Integer = 0 To e.Values.Count - 1
      If e.Values(i) IsNot Nothing Then
        e.Values(i) = Server.HtmlEncode(e.Values(i).ToString())
      End If
    Next
  End Sub
  
  Sub CustomerDetail_ItemUpdated(ByVal sender As Object, _
    ByVal e As DetailsViewUpdatedEventArgs)
    ' Refresh the GridView control after a new record is updated 
    ' in the DetailsView control.
    CustomersView.DataBind()
  End Sub
  
  Sub CustomerDetail_ItemUpdating(ByVal sender As Object, _
    ByVal e As DetailsViewUpdateEventArgs)
    ' Iterate though the values entered by the user and HTML encode 
    ' the values. This helps prevent malicious values from being 
    ' stored in the data source.
    For i As Integer = 0 To e.NewValues.Count - 1
      If e.NewValues(i) IsNot Nothing Then
        e.NewValues(i) = Server.HtmlEncode(e.NewValues(i).ToString())
      End If
    Next
  End Sub
  
  Sub CustomerDetail_ItemDeleted(ByVal sender As Object, _
    ByVal e As DetailsViewDeletedEventArgs)
    ' Refresh the GridView control after a new record is updated 
    ' in the DetailsView control.
    CustomersView.DataBind()
  End Sub
</script>

<html>
<body>
  <form id="Form1" runat="server">
    <h3>DetailsView Example</h3>
    <table cellspacing="10">
      <tr>
        <td>
          <!-- Use a GridView control in combination with      -->
          <!-- a DetailsView control to display master-detail  -->
          <!-- information. When the user selects a store from -->
          <!-- GridView control, the customers's detailed      -->
          <!-- information is displayed in the DetailsView     -->
          <!-- control.                                        -->
          <asp:GridView ID="CustomersView" DataSourceID="Customers" 
            AutoGenerateColumns="False"
            DataKeyNames="CustomerID" runat="server">
            <HeaderStyle BackColor="Blue" ForeColor="White" />
            <Columns>
              <asp:CommandField ShowSelectButton="True" />
              <asp:BoundField DataField="ContactName" 
                HeaderText="ContactName" />
              <asp:BoundField DataField="CompanyName" 
                HeaderText="CompanyName" />
            </Columns>
          </asp:GridView>
        </td>
        <td valign="top">
          <asp:DetailsView ID="CustomerDetail" DataSourceID="Details" 
            AutoGenerateRows="false"
            AutoGenerateInsertButton="true" 
            AutoGenerateEditButton="true" 
            AutoGenerateDeleteButton="true"
            EmptyDataText="No records." 
            DataKeyNames="CustomerID" GridLines="Both" 
            OnItemInserted="CustomerDetail_ItemInserted"
            OnItemInserting="CustomerDetail_ItemInserting" 
            OnItemUpdated="CustomerDetail_ItemUpdated"
            OnItemUpdating="CustomerDetail_ItemUpdating" 
            OnItemDeleted="CustomerDetail_ItemDeleted"
            runat="server">
            <HeaderStyle BackColor="Navy" ForeColor="White" />
            <RowStyle BackColor="White" />
            <AlternatingRowStyle BackColor="LightGray" />
            <EditRowStyle BackColor="LightCyan" />
            <Fields>
              <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" 
                ReadOnly="True" />
              <asp:BoundField DataField="ContactName" HeaderText="ContactName" />
              <asp:BoundField DataField="ContactTitle" HeaderText="ContactTitle" />
              <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" />
              <asp:BoundField DataField="Address" HeaderText="Address" />
              <asp:BoundField DataField="City" HeaderText="City" />
              <asp:BoundField DataField="Region" HeaderText="Region" />
              <asp:BoundField DataField="PostalCode" HeaderText="PostalCode" />
              <asp:BoundField DataField="Country" HeaderText="Country" />
              <asp:BoundField DataField="Phone" HeaderText="Phone" />
              <asp:BoundField DataField="Fax" HeaderText="Fax" />
            </Fields>
          </asp:DetailsView>
        </td>
      </tr>
    </table>
    <!-- This example uses Microsoft SQL Server and connects -->
    <!-- to the Northwind sample database.                   -->
    <!-- It is strongly recommended that each data-bound     -->
    <!-- control uses a separate data source control.        -->
    <asp:SqlDataSource ID="Customers" runat="server" 
      ConnectionString=
        "<%$ ConnectionStrings:NorthwindConnectionString %>"
      SelectCommand="SELECT [CompanyName], [ContactName], [CustomerID] 
        FROM [Customers]">
    </asp:SqlDataSource>
    <!-- Add a filter to the data source control for the     -->
    <!-- DetailsView control to display the details of the   -->
    <!-- store selected in the GridView control.             -->
    <asp:SqlDataSource ID="Details" 
      ConnectionString=
        "<%$ ConnectionStrings:NorthwindConnectionString %>"
      runat="server" 
      SelectCommand="SELECT * FROM [Customers] 
        WHERE ([CustomerID] = @CustomerID)"
      DeleteCommand="DELETE FROM [Customers] 
        WHERE [CustomerID] = @CustomerID"
      InsertCommand="INSERT INTO [Customers] ([CustomerID], 
        [CompanyName], [ContactName], [ContactTitle], [Address], 
        [City], [Region], [PostalCode], [Country], [Phone], [Fax]) 
        VALUES (@CustomerID, @CompanyName, @ContactName, 
        @ContactTitle, @Address, @City, @Region, @PostalCode, 
        @Country, @Phone, @Fax)"
      UpdateCommand="UPDATE [Customers] SET 
        [CompanyName] = @CompanyName, 
        [ContactName] = @ContactName, [ContactTitle] = @ContactTitle, 
        [Address] = @Address, [City] = @City, [Region] = @Region, 
        [PostalCode] = @PostalCode, [Country] = @Country, 
        [Phone] = @Phone, [Fax] = @Fax 
        WHERE [CustomerID] = @CustomerID">
      <SelectParameters>
        <asp:ControlParameter ControlID="CustomersView" 
          Name="CustomerID" PropertyName="SelectedValue"
          Type="String" />
      </SelectParameters>
      <DeleteParameters>
        <asp:Parameter Name="CustomerID" Type="String" />
      </DeleteParameters>
      <UpdateParameters>
        <asp:Parameter Name="CompanyName" Type="String" />
        <asp:Parameter Name="ContactName" Type="String" />
        <asp:Parameter Name="ContactTitle" Type="String" />
        <asp:Parameter Name="Address" Type="String" />
        <asp:Parameter Name="City" Type="String" />
        <asp:Parameter Name="Region" Type="String" />
        <asp:Parameter Name="PostalCode" Type="String" />
        <asp:Parameter Name="Country" Type="String" />
        <asp:Parameter Name="Phone" Type="String" />
        <asp:Parameter Name="Fax" Type="String" />
        <asp:Parameter Name="CustomerID" Type="String" />
      </UpdateParameters>
      <InsertParameters>
        <asp:Parameter Name="CustomerID" Type="String" />
        <asp:Parameter Name="CompanyName" Type="String" />
        <asp:Parameter Name="ContactName" Type="String" />
        <asp:Parameter Name="ContactTitle" Type="String" />
        <asp:Parameter Name="Address" Type="String" />
        <asp:Parameter Name="City" Type="String" />
        <asp:Parameter Name="Region" Type="String" />
        <asp:Parameter Name="PostalCode" Type="String" />
        <asp:Parameter Name="Country" Type="String" />
        <asp:Parameter Name="Phone" Type="String" />
        <asp:Parameter Name="Fax" Type="String" />
      </InsertParameters>
    </asp:SqlDataSource>
  </form>
</body>
</html>
C#
<%@ Page Language="C#" %>

<script runat="server">
  void CustomerDetail_ItemInserted(object sender, 
    DetailsViewInsertedEventArgs e)
  {
    // Refresh the GridView control after a new record is inserted 
    // in the DetailsView control.
    CustomersView.DataBind();
  }

  void CustomerDetail_ItemInserting(object sender, 
    DetailsViewInsertEventArgs e)
  {
    // Iterate though the values entered by the user and HTML encode 
    // the values. This helps prevent malicious values from being 
    // stored in the data source.
    for (int i = 0; i < e.Values.Count; i++)
    {
      if (e.Values[i] != null)
      {
        e.Values[i] = Server.HtmlEncode(e.Values[i].ToString());
      }
    }
  }

  void CustomerDetail_ItemUpdated(object sender, 
    DetailsViewUpdatedEventArgs e)
  {
    // Refresh the GridView control after a new record is updated 
    // in the DetailsView control.
    CustomersView.DataBind();
  }

  void CustomerDetail_ItemUpdating(object sender, 
    DetailsViewUpdateEventArgs e)
  {
    // Iterate though the values entered by the user and HTML encode 
    // the values. This helps prevent malicious values from being 
    // stored in the data source.
    for (int i = 0; i < e.NewValues.Count; i++)
    {
      if (e.NewValues[i] != null)
      {
        e.NewValues[i] = Server.HtmlEncode(e.NewValues[i].ToString());
      }
    }
  }

  void CustomerDetail_ItemDeleted(object sender, 
    DetailsViewDeletedEventArgs e)
  {
    // Refresh the GridView control after a new record is updated 
    // in the DetailsView control.
    CustomersView.DataBind();
  }
</script>

<html>
<body>
  <form id="Form1" runat="server">
    <h3>
      DetailsView Example</h3>
    <table cellspacing="10">
      <tr>
        <td>
          <!-- Use a GridView control in combination with      -->
          <!-- a DetailsView control to display master-detail  -->
          <!-- information. When the user selects a store from -->
          <!-- GridView control, the customers//s detailed     -->
          <!-- information is displayed in the DetailsView     -->
          <!-- control.                                        -->
          <asp:GridView ID="CustomersView" DataSourceID="Customers" 
            AutoGenerateColumns="False"
            DataKeyNames="CustomerID" runat="server">
            <HeaderStyle BackColor="Blue" ForeColor="White" />
            <Columns>
              <asp:CommandField ShowSelectButton="True" />
              <asp:BoundField DataField="ContactName" 
                HeaderText="ContactName" />
              <asp:BoundField DataField="CompanyName" 
                HeaderText="CompanyName" />
            </Columns>
          </asp:GridView>
        </td>
        <td valign="top">
          <asp:DetailsView ID="CustomerDetail" 
            DataSourceID="Details" AutoGenerateRows="false"
            AutoGenerateInsertButton="true" 
            AutoGenerateEditButton="true" 
            AutoGenerateDeleteButton="true"
            EmptyDataText="No records." 
            DataKeyNames="CustomerID" GridLines="Both" 
            OnItemInserted="CustomerDetail_ItemInserted"
            OnItemInserting="CustomerDetail_ItemInserting" 
            OnItemUpdated="CustomerDetail_ItemUpdated"
            OnItemUpdating="CustomerDetail_ItemUpdating" 
            OnItemDeleted="CustomerDetail_ItemDeleted"
            runat="server">
            <HeaderStyle BackColor="Navy" ForeColor="White" />
            <RowStyle BackColor="White" />
            <AlternatingRowStyle BackColor="LightGray" />
            <EditRowStyle BackColor="LightCyan" />
            <Fields>
              <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" ReadOnly="True" />
              <asp:BoundField DataField="ContactName" HeaderText="ContactName" />
              <asp:BoundField DataField="ContactTitle" HeaderText="ContactTitle" />
              <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" />
              <asp:BoundField DataField="Address" HeaderText="Address" />
              <asp:BoundField DataField="City" HeaderText="City" />
              <asp:BoundField DataField="Region" HeaderText="Region" />
              <asp:BoundField DataField="PostalCode" HeaderText="PostalCode" />
              <asp:BoundField DataField="Country" HeaderText="Country" />
              <asp:BoundField DataField="Phone" HeaderText="Phone" />
              <asp:BoundField DataField="Fax" HeaderText="Fax" />
            </Fields>
          </asp:DetailsView>
        </td>
      </tr>
    </table>
    <!-- This example uses Microsoft SQL Server and connects -->
    <!-- to the Northwind sample database.                   -->
    <!-- It is strongly recommended that each data-bound     -->
    <!-- control uses a separate data source control.        -->
    <asp:SqlDataSource ID="Customers" runat="server" 
      ConnectionString=
        "<%$ ConnectionStrings:NorthwindConnectionString %>"
      SelectCommand="SELECT [CompanyName], [ContactName], [CustomerID] 
        FROM [Customers]">
    </asp:SqlDataSource>
    <!-- Add a filter to the data source control for the     -->
    <!-- DetailsView control to display the details of the   -->
    <!-- store selected in the GridView control.             -->
    <asp:SqlDataSource ID="Details" 
      ConnectionString=
        "<%$ ConnectionStrings:NorthwindConnectionString %>"
      runat="server" 
      SelectCommand="SELECT * FROM [Customers] 
        WHERE ([CustomerID] = @CustomerID)"
      DeleteCommand="DELETE FROM [Customers] 
        WHERE [CustomerID] = @CustomerID"
      InsertCommand="INSERT INTO [Customers] ([CustomerID], 
        [CompanyName], [ContactName], [ContactTitle], [Address], 
        [City], [Region], [PostalCode], [Country], [Phone], [Fax]) 
        VALUES (@CustomerID, @CompanyName, @ContactName, @ContactTitle, 
        @Address, @City, @Region, @PostalCode, @Country, @Phone, @Fax)"
      UpdateCommand="UPDATE [Customers] SET [CompanyName] = @CompanyName, 
        [ContactName] = @ContactName, [ContactTitle] = @ContactTitle, 
        [Address] = @Address, [City] = @City, [Region] = @Region, 
        [PostalCode] = @PostalCode, [Country] = @Country, 
        [Phone] = @Phone, [Fax] = @Fax 
        WHERE [CustomerID] = @CustomerID">
      <SelectParameters>
        <asp:ControlParameter ControlID="CustomersView" 
          Name="CustomerID" PropertyName="SelectedValue"
          Type="String" />
      </SelectParameters>
      <DeleteParameters>
        <asp:Parameter Name="CustomerID" Type="String" />
      </DeleteParameters>
      <UpdateParameters>
        <asp:Parameter Name="CompanyName" Type="String" />
        <asp:Parameter Name="ContactName" Type="String" />
        <asp:Parameter Name="ContactTitle" Type="String" />
        <asp:Parameter Name="Address" Type="String" />
        <asp:Parameter Name="City" Type="String" />
        <asp:Parameter Name="Region" Type="String" />
        <asp:Parameter Name="PostalCode" Type="String" />
        <asp:Parameter Name="Country" Type="String" />
        <asp:Parameter Name="Phone" Type="String" />
        <asp:Parameter Name="Fax" Type="String" />
        <asp:Parameter Name="CustomerID" Type="String" />
      </UpdateParameters>
      <InsertParameters>
        <asp:Parameter Name="CustomerID" Type="String" />
        <asp:Parameter Name="CompanyName" Type="String" />
        <asp:Parameter Name="ContactName" Type="String" />
        <asp:Parameter Name="ContactTitle" Type="String" />
        <asp:Parameter Name="Address" Type="String" />
        <asp:Parameter Name="City" Type="String" />
        <asp:Parameter Name="Region" Type="String" />
        <asp:Parameter Name="PostalCode" Type="String" />
        <asp:Parameter Name="Country" Type="String" />
        <asp:Parameter Name="Phone" Type="String" />
        <asp:Parameter Name="Fax" Type="String" />
      </InsertParameters>
    </asp:SqlDataSource>
  </form>
</body>
</html>

下面的代码示例演示如何以声明方式将行字段添加到 DetailsView 控件。

Visual Basic
<%@ Page Language="VB" %>

<html>
<body>
  <form id="Form1" runat="server">
    <table cellspacing="10">
      <tr>
        <td>
          <!-- Use a GridView control in combination with      -->
          <!-- a DetailsView control to display master-detail  -->
          <!-- information. When the user selects a store from -->
          <!-- GridView control, the store's detailed          -->
          <!-- information is displayed in the DetailsView     -->
          <!-- control.                                        -->
          <asp:GridView ID="GridView1" runat="server" 
            DataSourceID="Customers" AutoGenerateColumns="False" 
            DataKeyNames="CustomerID">
            <Columns>
              <asp:CommandField ShowSelectButton="True" />
              <asp:BoundField DataField="ContactName" HeaderText="ContactName" />
              <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" />
            </Columns>
          </asp:GridView>
        </td>
        <td valign="top">
          <asp:DetailsView ID="DetailsView" runat="server"
            DataSourceID="Details" AutoGenerateRows="false"
            DataKeyNames="CustomerID" >
            <HeaderStyle BackColor="Navy" ForeColor="White" />
            <Fields>
              <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" 
                ReadOnly="True" />
              <asp:BoundField DataField="ContactName" HeaderText="ContactName" />
              <asp:BoundField DataField="ContactTitle" HeaderText="ContactTitle" />
              <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" />
              <asp:BoundField DataField="City" HeaderText="City" />
              <asp:BoundField DataField="Region" HeaderText="Region" />
              <asp:BoundField DataField="PostalCode" HeaderText="PostalCode" />
              <asp:BoundField DataField="Country" HeaderText="Country" />
            </Fields>
          </asp:DetailsView>
        </td>
      </tr>
    </table>
    <!-- This example uses Microsoft SQL Server and connects -->
    <!-- to the Northwind sample database.                        -->
    <!-- It is strongly recommended that each data-bound     -->
    <!-- control uses a separate data source control.        -->
    <asp:SqlDataSource ID="Customers" runat="server" 
      ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
      SelectCommand="SELECT [CompanyName], [ContactName], [CustomerID] FROM [Customers]">
    </asp:SqlDataSource>
    <!-- Add a filter to the data source control for the     -->
    <!-- DetailsView control to display the details of the   -->
    <!-- store selected in the GridView control.             -->
    <asp:SqlDataSource ID="Details" runat="server" 
      ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
      SelectCommand="SELECT * FROM [Customers] WHERE ([CustomerID] = @CustomerID)">
      <SelectParameters>
        <asp:ControlParameter ControlID="GridView1" Name="CustomerID" 
          PropertyName="SelectedValue"
          Type="String" />
      </SelectParameters>
    </asp:SqlDataSource>
  </form>
</body>
</html>
C#
<%@ Page Language="C#" %>

<html>
<body>
  <form id="Form1" runat="server">
    <table cellspacing="10">
      <tr>
        <td>
          <!-- Use a GridView control in combination with      -->
          <!-- a DetailsView control to display master-detail  -->
          <!-- information. When the user selects a store from -->
          <!-- GridView control, the store's detailed          -->
          <!-- information is displayed in the DetailsView     -->
          <!-- control.                                        -->
          <asp:GridView ID="GridView1" runat="server" 
            DataSourceID="Customers" AutoGenerateColumns="False" 
            DataKeyNames="CustomerID">
            <Columns>
              <asp:CommandField ShowSelectButton="True" />
              <asp:BoundField DataField="ContactName" HeaderText="ContactName" />
              <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" />
            </Columns>
          </asp:GridView>
        </td>
        <td valign="top">
          <asp:DetailsView ID="DetailsView" runat="server"
            DataSourceID="Details" AutoGenerateRows="false"
            DataKeyNames="CustomerID" >
            <HeaderStyle BackColor="Navy" ForeColor="White" />
            <Fields>
              <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" 
                ReadOnly="True" />
              <asp:BoundField DataField="ContactName" HeaderText="ContactName" />
              <asp:BoundField DataField="ContactTitle" HeaderText="ContactTitle" />
              <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" />
              <asp:BoundField DataField="City" HeaderText="City" />
              <asp:BoundField DataField="Region" HeaderText="Region" />
              <asp:BoundField DataField="PostalCode" HeaderText="PostalCode" />
              <asp:BoundField DataField="Country" HeaderText="Country" />
            </Fields>
          </asp:DetailsView>
        </td>
      </tr>
    </table>
    <!-- This example uses Microsoft SQL Server and connects -->
    <!-- to the Northwind sample database.                        -->
    <!-- It is strongly recommended that each data-bound     -->
    <!-- control uses a separate data source control.        -->
    <asp:SqlDataSource ID="Customers" runat="server" 
      ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
      SelectCommand="SELECT [CompanyName], [ContactName], [CustomerID] FROM [Customers]">
    </asp:SqlDataSource>
    <!-- Add a filter to the data source control for the     -->
    <!-- DetailsView control to display the details of the   -->
    <!-- store selected in the GridView control.             -->
    <asp:SqlDataSource ID="Details" runat="server" 
      ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
      SelectCommand="SELECT * FROM [Customers] WHERE ([CustomerID] = @CustomerID)">
      <SelectParameters>
        <asp:ControlParameter ControlID="GridView1" Name="CustomerID" 
          PropertyName="SelectedValue"
          Type="String" />
      </SelectParameters>
    </asp:SqlDataSource>
  </form>
</body>
</html>
.NET Framework 安全性

继承层次结构

System.Object
   System.Web.UI.Control
     System.Web.UI.WebControls.WebControl
       System.Web.UI.WebControls.BaseDataBoundControl
         System.Web.UI.WebControls.DataBoundControl
           System.Web.UI.WebControls.CompositeDataBoundControl
            System.Web.UI.WebControls.DetailsView
线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。
平台

Windows 98、Windows 2000 SP4、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0
请参见

标记 :


Page view tracker