• 网格视图控件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控件编辑当前行数据

  • 相关阅读:
    [LeetCode] Majority Element II
    [Nginx] 事件模型
    [Nginx] 进程模型
    [C++] 函数中的字符串指针与数组
    [LeetCode] Shortest Distance to a Character
    [LeetCode] Number of Lines To Write String
    Ubuntu 16.04中安装谷歌Chrome浏览器
    Python、机器学习、计算机视觉、深度学习入门
    Sublime安装与配置
    [20160807][系统设计的三次迭代]
  • 原文地址:https://www.cnblogs.com/jiangyuxuan/p/843824.html
Copyright © 2020-2023  润新知