文章教程

9.2GridView控件

8/31/2020 9:52:39 PM 人评论 次浏览

9.2 GridView控件

GridView控件是一个非常重要的控件,几乎任何和数据相关的表现都要用到该控件。它能以表格的方式显示数据源中的数据,并提供诸如分页、排序、过滤以及编辑等一些强大的内置功能,所以能简化Web应用程序的开发过程。

9.2.1 GridView控件的属性、方法和事件

GridView控件的属性分为两个主要部分,第一部分用于控制GridView控件的整体显示效果,包括数据源、绑定表达式、每页容纳的记录的条数等等;第二部分用于控制记录每个字段的显示效果。GridView控件的常用属性如表9-1所示。

表9-1 GridView控件的常用属性

alt

GridView控件提供的方法很少,对其操作主要是通过属性和在事件处理程序中添加代码来完成的。GridView控件的常用方法如表9-2所示。

表9-2 GridView控件的常用方法

alt

GridView控件可以在事件处理程序中使用ADO.NET方法编写操作和处理数据的代码。它常用事件如表9-3所示。

表9-3 GridView控件的常用事件

alt

9.2.2 GridView控件的列

GridView控件中显示的列是自动生成的。默认属性AutoGenerateColumns为true。但在很多情况下,GridView控件的每一列的显示都需要实现定义。GridView控件提供了几种类型的列以方便开发人员的操作,如表9-4所示。

表9-4 GridView控件的列类型

alt

所有列的编辑都可以通过“字段”对话框来进行,编辑过程如下:

进入“字段”对话框的方式有两种:

● 选中要编辑的GridView控件,单击右上角的小按钮,在弹出如图9-1所示的菜单命令中选取“编辑列…”命令。

alt

图9-1 GridView任务列表

● 选中要编辑的GridView控件,在“属性”窗口中找到Columns属性,选中该属性,单击在该属性最右边出现时如图9-2所示的按钮。

alt

图9-2 “属性”窗口

进入如图9-3所示的“字段”对话框。在“可用字段”列表中列出了GridView控件的列类型。当我们选择某一列类型后,单击“添加”按钮即可将该列类型添加到“选定的字段”列表中。同时在右侧相应的列类型的属性列表中设置该字段的属性。以前文的tb_News数据库来说,我们在GridView1控件中定义4个列字段,分别是新闻编号、新闻标题、新闻内容、新闻类别。首先选择“可用字段”列表中的BoundField类型,单击“添加”按钮。在“选定字段”列表中单击刚才选择的BoundField,然后在右侧的“BoundField属性”列表中设置相关的属性。这里设置BoundField属性为ID,表示绑定的数据来自于数据库中数据表tb_News中ID字段上的值。设置HeaderText属性为“新闻编号”,表示显示在GridView1控件列标题显示的文字。按上面的方法依次设置其余的字段。最后单击“确定”按钮结束GridView控件列字段的设置。

alt

图9-3 字段对话框

打开如图9-4所示的GridView控件“属性”窗口,设置AutoGenerateColumns属性值为False。

alt

图9-4 “属性”窗口

至此,GridView控件的列编辑完毕,在“设计视图”中会发现GridView控件的列标题显示了如图9-5中设置的中文名称。

alt

图9-5 设计界面

9.2.3 GridView控件的分页和排序

当数据很多,不能只用一页就将数据全部显示出来时,就需要进行分页显示了。GridView控件提供了很好地分页显示支持。从表9-1中可以知道,属性AllowPaging决定是否使用分页显示,如果要使用分页显示,需要设置该属性值为true,否则该属性为false。使用PagerSetting属性可以设置分页显示的模式,可以通过设置PagerSettings类的Mode属性来自定义分页模式。Mode属性的值包括:

● NextPrevious:上一页按钮和下一页按钮。

● NextPreviousFirstLast:上一页按钮、下一页按钮、第一页按钮和最后一页按钮。

● Numeric:可直接访问页面的带编号的链接按钮。

● NumericFirstLast:带编号的链接按钮、第一个链接按钮和最后一个链接按钮。

例如,下面的代码,启动GridView控件的分页功能并设置分页的格式:

alt

上面的代码中,设置GridView控件的AllowPaging属性设置为true,PageSize属性设置为5,表示每页只显示5条记录。设置PagerSetting属性,NextPageText属性设置为“后一页”,PreviousPageText属性设置为“前一页”,当显示模式设置为链接分页显示模式时,这两个属性设置的值将显示在页面上,用户单击后可以进行页面切换。

排序是数据显示控件的必备功能,GridView控件自然也不会例外,只要将GridView控件的AllowSorting属性设置为true,即可启用该控件中的默认排序行为。将此属性设置为true会使GridView控件将LinkButton控件呈现在列标题中。此外,该控件还将每一列的SortExpression属性隐式设置为它所绑定到的数据字段的名称。

在运行时,用户可以单击某列标题中的LinkButton控件按该列排序。单击该链接会使页面执行回发并引发GridView控件的Sorting事件。排序表达式(默认情况下是数据列的名称)作为事件参数的一部分传递。Sorting事件的默认行为是GridView控件将排序表达式传递给数据源控件。数据源控件执行其选择查询或方法,其中包括由网格传递的排序参数。

执行完查询后,将引发网格的Sorted事件。此事件使可以执行查询后逻辑,如显示一条状态消息等。最后,数据源控件将GridView控件重新绑定到已重新排序的查询的结果。

在默认情况下,当把AllowSorting属性设置为true时,GridView控件将支持所有列可排序,但可以通过设置列的属性SortExpression为空字符串即可禁用对这个列进行排序。

例如,下面的代码,启动GridView控件的排序功能:

alt

代码说明:第1行添加了一个服务器列表控件GirdView1并设置AllowPaging属性启用分页功能。第2行设置属性AllowSorting使得该控件可以以字段标题进行排序,同时设置AutoGenerateColumns为False禁用自动生成列的功能。第3行通过DataKeyNames属性将ID字段设为主键;设置DataSourceID属性将数据源控件SqlDataSource1作为GridView的数据源;设置PageSize属性为5,表示分页后,每页显示5条数据记录。

第5行到8行分别定义GirdView控件的4个列Name、ID、Author和Press,每一列的定义包括数据区域指定、列标题和排序表达式的设置。

9.2.4 GridView控件的数据操作

当GridView控件把数据显示到页面时,有时候可能需要对这些数据进行诸如修改或删除的操作。GridView控件通过内置的属性来提供这些操作界面,而实际的数据操作则通过数据源控件或ADO.NET来实现。

有如下三种方式来启用GridView控件的删除或修改功能:

● 将AutoGenerateEditButton属性设置为true以启用修改,将AutoGenerateDeleteButton属性设置为true以启用删除。

● 添加一个CommandField列,并将其ShowEditButton属性设置为true以启用修改,将其ShowDeleteButton属性设置为true以启用删除。

● 创建一个TemplateField,其中ItemTemplate包含多个命令按钮,要进行更新时可将CommandName设置为Edit,要进行删除时可设置为Delete。

当启用GridView控件的删除或修改功能时,GridView控件会显示一个能够让用户编辑或删除各行的用户界面:一般情况下,会在一列或多列中显示按钮或链接,用户通过单击按钮或链接把所在的行置于可编辑模式下或直接把该行删除。

在处理更改和删除的实际操作时,有如下两种选择:

(1)使用数据源控件。用户保存更改时,GridView控件将更改和主键信息传递到由DataSourceID属性标识的数据源控件,从而调用适当的更新操作,例如,SqlDataSource控件使用更改后的数据作为参数值来执行SQL Update语句。用户删除行时,GridView控件将主键信息传递到由DataSourceID属性标识的数据源控件,从而调用执行SQL Delete语句时进行删除操作。

(2)在事件处理程序中使用ADO.NET方法编写自动的更新或删除代码。用户保存更改时将触发事件RowUpdated,在该事件处理程序中获得更改后数据,然后使用ADO.NET方法调用SQL Update语句把数据更新。用户删除行时将触发事件RowDeleted,在事件处理程序中获得要删除行的数据的主键,然后使用ADO.NET方法调用SQL Delete语句把数据更新。在事件处理程序中是根据三个属性来获得GridView控件传递的数据的,GridView控件三个属性分别是Keys属性、NewValues属性和OldValues属性。

其中,Keys属性包含字段的名称和值,通过它们唯一标识将要更新或删除的记录,并始终包含键字段的原始值。若要指定哪些字段放置在Keys属性中,可将DataKeyNames属性设置为用逗号分隔的、用于表示数据主键的字段名称的列表。DataKeys属性会用与为DataKeyNames属性指定的字段关联的值自动填充。NewValues属性包含正在编辑的行中的输入控件的当前值。OldValues属性包含除键字段以外的任何字段的原始值,键字段包含在Keys属性中。

此外,数据源控件还可以使用Keys、NewValues和OldValues属性中的值作为更新或删除命令的参数。

【实例9-1】GridView控件的使用

本实例使用GridView控件与数据源控件SqlDataSource一起实现数据的更新和删除操作,具体实现步骤如下:

01 启动Visual Studio 2012,创建一个ASP.NET Web空应用程序,命名为“实例9-1”。

02 在“实例9-1”中创建一个名为Default.aspx的窗体。

03 单击网站的目录下的Default.aspx文件,进入“视图编辑”界面,打开“设计视图”,从工具箱中拖动一个GridView控件和一个SqlDataSource数据源控件。

04 将鼠标移到GridView控件上,其上方会出现一个向右的黑色小三角。单击它,弹出“GridView任务”列表。在“选择数据源”下拉列表中选中SqlDataSource1。

05 在GridView控件右上方有一个向右的黑色小三角,单击这个小按钮打开如图9-6所示的“GridView任务”列表。

alt

图9-6 “GridView任务”列表

06 选择“自动套用格式”选项,弹出如图9-7所示的自动套用格式对话框。在左边的选择架构列表中有多种外观格式供我们使用,只要选中某一格式,在右边的预览窗口中会看到该格式的效果。最后,单击“确定”按钮,即可在页面中使用这一外观格式。

alt

图9-7 “自动套用格式”对话框

07 进入“视图编辑”界面,打开“源视图”,在编辑区中编写声明GridView控件和SqlDataSource的关键代码如下。

alt

上面的代码中第1行添加了一个服务器列表控件GirdView1,同时设置AllowPaging属性启用分页功能,设置属性AllowSorting使得该控件可以以字段标题进行排序,设置AutoGenerateColumns为False,禁用自动生成列的功能,设置DataKeyNames属性将ID字段作为主键;设置DataSourceID属性将数据源控件SqlDataSource1作为GridView的数据源;设置PageSize属性为5,表示分页后,每页显示5条数据记录。

第2行~第8行分别定义GirdView控件的4个列ID、Title、Categories和IssueDate,每一列的定义包括数据区域指定、列标题和排序表达式的设置,并且添加一个列CommandField,用来显示编辑按钮和删除按钮。

第10行添加了一个服务器数据源控件SqlDataSource1,设置控件的ConnectionString属性连接字符串对象为db_newsConnectionString,该字符串自动在Web.config文件中的<connectionStrings></connectionStrings>节点中生成。第11行通过DeleteCommand属性设置删除数据表数据的sql语句。第12行通过InsertCommand属性设置插入数据表数据的sql语句。第14行通过SelectCommand属性设置查询数据表数据的sql语句。第15行通过UpdateCommand属性设置查询数据表数据的sql语句。第16行~第23行定义删除命令中的4个参数编号和类型。第24行~第30定义插入命令中的4个参数和类型。第31行~第43行定义更新命令中的4个新参数数、4个旧参数已及它们的类型。

08 按快捷键Ctrl+F5运行程序,如图9-8所示。单击表中第三条数据中的“编辑”按钮。

alt

图9-8 运行结果1

09 进入如图9-9所示的编辑操作。每一列可编辑的数据都以文本框的形式出现,这样用户就可以修改其中的数据。输入新的新闻标题、新的新闻类别。如果想取消更新操作可以单击“取消”按钮,回到图9-8的界面。如果确认要进行更新操作,就单击“更新”按钮。

alt

图9-9 运行结果2

10 GridView控件显示如图9-10所示的更新数据后的界面。新的数据显示在列表中,如果要删除此条新数据,单击“删除”按钮即可。

alt

图9-10 运行结果3

教程类别