网格视图控件GridView (2)

5.5  操作一条记录

ASP.NET 2.0提供了可以操作一条记录的数据控件:DetailsView和FormView。它们和Repeater、DataList、GridView等迭代控件最大的区别在于:迭代控件可以一次显示多条记录,而DetailsView和FormView一次只能显示一条记录。

5.5.1  详细视图控件DetailsView和窗体视图控件FormView

DetailsView和FormView控件非常相似,它们都能够实现显示、编辑、插入或删除数据源中的一条记录,且每一次只能显示或操作一条记录。DetailsView和FormView控件实现的主要功能描述如下。

     显示一条记录,即将数据源中的数据绑定到控件。

     插入数据,将新数据插入到数据源中。

     更新数据,修改当前记录。

     删除数据,删除当前记录。

     分页功能,分页显示数据中的数据(每一页只能显示一条记录)。

     对控件应用主题和样式,并能够在这些主题和样式中自定义外观。

     动态处理它们的事件。

由于DetailsView和FormView控件非常相似,因此它们的很多属性也比较相似性。在此,笔者仅介绍FormView控件的属性,如表5-26所示。

表5-26                                                      FormView控件的属性

属    性

描    述

AllowPaging

是否启用分页功能

PageCount

数据分页后,所需要的页码总数

PageIndex

当前页的索引

PagerSettings

控件中的页导航按钮的属性

BackImageUrl

控件背景图像的URL

Caption

控件的标题

CaptionAlign

控件中的标题排列方式,可以是水平或垂直方式

CellPadding

单元格的内容和单元格的边框之间的空间量

CellSpacing

单元格间的空间量

CurrentMode

控件的当前数据输入模式

DefaultMode

控件的默认模式。控件在更新、插入或取消操作后返回该模式

DataItem

控件的数据项

DataItemCount

数据项的数量

DataItemIndex

从数据源绑定到控件的数据项的索引

DataKey

记录的主键

SelectedValue

控件中的当前记录的数据键值

DataKeyNames

包含数据源的键字段的名称的数组

EmptyDataText

当控件的数据源为空时,控件显示的文本

HeaderText

控件的标题行中显示的文本

FooterText

控件的脚注行中显示的文本

HorizontalAlign

控件在页面上的水平对齐方式

GridLines

控件的网格线样式

TopPagerRow

控件顶部显示的页导航行

BottomPagerRow

控件底部显示的页导航行

HeaderRow

控件的标题行

FooterRow

控件的脚注行

Row

控件的数据行

HeaderTemplate

控件的标题行模板

续表

属    性

描    述

FooterTemplate

控件的脚注行模板

EditItemTemplate

控件的编辑模板

ItemTemplate

控件的项模板

InsertItemTemplate

控件的插入模板

PagerTemplate

控件的分页模板

EmptyDataTemplate

当控件的数据源为空时,控件显示该模板中的文本

HeaderStyle

控件的标题行的样式

FooterStyle

控件的脚注行的样式

EditRowStyle

控件的编辑行的样式

InsertRowStyle

控件的插入行的样式

PagerStyle

控件的页导航行的样式

EmptyDataRowStyle

控件的空数据行的样式

RowStyle

控件的数据行的样式

5.5.2  详细视图控件和窗体视图控件的区别

虽然DetailsView和FormView控件非常相似,但是它们还存在一定的差别,具体描述如下。

     DetailsView控件使用表格对控件的内容进行布局,并且数据源中的每一个字段独占一行。

     FormView控件使用模板对控件的内容进行布局,这种方式的布局比DetailsView控件灵活。

     DetailsView和FormView控件支持的模板种类不相同,具体差别如表5-27所示。

表5-27                                      DetailsView和FormView控件支持的模板

控    件

支持的模板

DetailsView

HeaderTemplate

FooterTemplate

PagerTemplate

EmptyDataTemplate

FormView

HeaderTemplate

FooterTemplate

ItemTemplate

EditItemTemplate

InsertItemTemplate

PagerTemplate

EmptyDataTemplate

5.5.3  实现“主/从”数据操作

DetailsView和FormView控件都可以显示数据源中的单条记录。它们最常用的功能是与GridView控件一起使用,从而实现被称为“主/从”的数据操作方式。

下面的代码实例声明了一个GridView控件、一个DetailsView控件和两个SqlDataSource控件。它们的ID属性的值分别为gvUser、dvUser、myDSUser和myDSSingleUser。其中,gvUser控件使用数据源控件myDSUser,它仅仅提供数据显示功能。dvUser控件的数据源控件为myDSSingleUser,它可以执行插入、编辑、删除等操作。

注意

dvUser控件只显示gvUser控件当前选择行的数据,并对该数据进行插入、编辑、删除等操作。

<!-- Sample_05_05的GridDetailsView.aspx页面 -->

<%@ Page Language="C#" %>

<script runat="server">

protected void dvUser_ItemUpdated(object sender,

    DetailsViewUpdatedEventArgs e)

{

    gvUser.DataBind();

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server"><title>实现“主/从”数据操作</title></head>

<body><form id="form1" runat="server">

<asp:GridView ID="gvUser" runat="server" AutoGenerateColumns="False"

    BackColor="White" BorderColor="#336666" BorderStyle="Double"

    BorderWidth="3px" CellPadding="4" GridLines="Horizontal"

    DataKeyNames="ID" DataSourceID="myDSUser" Font-Size="9pt">

    <Columns>

        <asp:CommandField ShowSelectButton="True" />

        <asp:BoundField DataField="ID" HeaderText="ID"

            InsertVisible="False" ReadOnly="True" SortExpression="ID" />

        <asp:BoundField DataField="UserName" HeaderText="UserName"

            SortExpression="UserName" />

        <asp:BoundField DataField="Email" HeaderText="Email"

            SortExpression="Email" />

        <asp:BoundField DataField="CreateDate" HeaderText="CreateDate"

            SortExpression="CreateDate" ReadOnly="True" />

</Columns>

</asp:GridView>

<asp:SqlDataSource ID="myDSUser" runat="server" ConnectionString="<%$

    ConnectionStrings:WEB2ASPNET2DBConnectionString %>"

    SelectCommand="SELECT [ID], [UserName], [Email], [CreateDate]

        FROM [User]"></asp:SqlDataSource>

<asp:DetailsView ID="dvUser" runat="server" BackColor="White"

    BorderColor="#336666" BorderStyle="Double" BorderWidth="3px"

    CellPadding="4" GridLines="Horizontal" AutoGenerateRows="False"

    DataKeyNames="ID" DataSourceID="myDSSingleUser"

    OnItemUpdated="dvUser_ItemUpdated" Font-Size="9pt">

    <Fields>

        <asp:BoundField DataField="ID" HeaderText="ID"

            InsertVisible="False" ReadOnly="True" SortExpression="ID" />

        <asp:BoundField DataField="UserName" HeaderText="UserName"

            SortExpression="UserName" />

        <asp:BoundField DataField="Email" HeaderText="Email"

            SortExpression="Email" />

        <asp:BoundField DataField="CreateDate" HeaderText="CreateDate"

            SortExpression="CreateDate" />

        <asp:CommandField ShowEditButton="True" />

        <asp:CommandField ShowDeleteButton="True" />

        <asp:CommandField ShowInsertButton="True" />

</Fields>

</asp:DetailsView>

<asp:SqlDataSource ID="myDSSingleUser" runat="server"

    ConnectionString="<%$

        ConnectionStrings:WEB2ASPNET2DBConnectionString%>"

    SelectCommand="SELECT [ID], [UserName], [Email], [CreateDate]

        FROM [User] WHERE ID = @ID"

    DeleteCommand="DELETE [User] WHERE ID = @ID"

    InsertCommand="INSERT INTO [User](Username,Email,RoleID,CreateDate)

        VALUES(@Username,@Email,1,GetDate())"

    UpdateCommand="UPDATE [User] SET Username = @Username,

        Email = @Email,CreateDate = GetDate() WHERE ID = @ID">

    <DeleteParameters><asp:Parameter Name="ID" /></DeleteParameters>

    <UpdateParameters>

        <asp:Parameter Name="Username" /><asp:Parameter Name="Email" />

        <asp:Parameter Name="ID" />

    </UpdateParameters>

    <InsertParameters>

      <asp:Parameter Name="Username" /><asp:Parameter Name="Email" />

    </InsertParameters>

    <SelectParameters>

      <asp:ControlParameter ControlID="gvUser" DefaultValue="-1"

          Name="ID" PropertyName="SelectedValue" />

    </SelectParameters>

</asp:SqlDataSource>

</form></body>

</html>

上述代码实例执行之后,GridDetailsView.aspx页面如图5.35所示。单击第3行中的【选择】链接,dvUser控件将显示该行数据。此时,单击dvUser控件中的【编辑】链接,如图5.36所示。

  

  图5.35  GridDetailsView.aspx页面的初始界面           图5.36  dvUser控件编辑当前行数据

你可能感兴趣的:(GridView)