修改 GridView Web 服务器控件中的数据
更新:2007 年 11 月
GridView 控件具有一些内置功能,允许用户在不需要编程的情况下编辑或删除记录。可以使用事件和模板来自定义 GridView 控件的编辑或删除功能。
启用内置编辑功能
您可以通过以下任一方式启用 GridView 控件的内置编辑或删除功能:
将 AutoGenerateEditButton 属性设置为 true 以启用更新,将 AutoGenerateDeleteButton 属性设置为 true 以启用删除。
添加一个 CommandField,并将其 ShowEditButton 属性设置为 true 以启用更新,将其 ShowDeleteButton 属性设置为 true 以启用删除。
创建一个 TemplateField,其中 ItemTemplate 包含多个命令按钮,要进行更新时可将 CommandName 设置为“Edit”,要进行删除时可设置为“Delete”。有关更多信息,请参见在 GridView Web 服务器控件中创建自定义列。
如何在 GridView 控件中进行编辑
GridView 控件可以显示一个用户界面 (UI),让用户能够编辑各行的内容。通常,可编辑的网格中会有一列包含一个按钮或链接,用户可以通过单击该按钮或链接将所在的行置于编辑模式下。(默认情况下,按钮标题是“编辑”。)
用户保存更改时,GridView 控件将更改和主键信息传递到由 DataSourceID 属性标识的数据源控件,从而调用适当的更新操作。例如,SqlDataSource 控件使用更改后的数据作为参数值来执行 SQL Update 语句。ObjectDataSource 控件调用其更新方法,并将更改作为参数传递给方法调用。
GridView 控件在三个字典集合中将值传递到数据源以进行更新或删除操作:Keys 字典、NewValues 字典和 OldValues 字典。可以使用传递到 GridView 控件的更新或删除事件的参数访问每个字典。
Keys 字典包含字段的名称和值,通过它们唯一标识将要更新或删除的记录,并始终包含键字段的原始值。若要指定哪些字段放置在 Keys 字典中,可将 DataKeyNames 属性设置为用逗号分隔的、用于表示数据主键的字段名称的列表。DataKeys 集合会用与为 DataKeyNames 属性指定的字段关联的值自动填充。
![]() |
---|
DataKeyNames 属性中指定的字段的原始主键值存储在视图状态中。如果主键值中包含敏感信息,则应通过将页的 ViewStateEncryptionMode 属性设置为 Always 来加密视图状态的内容。 |
NewValues 字典包含正在编辑的行中的输入控件的当前值。OldValues 字典包含除键字段以外的任何字段的原始值,键字段包含在 Keys 字典中。
数据源控件使用 Keys、NewValues 和 OldValues 字典中的值作为更新或删除命令的参数。有关如何根据为绑定值创建的字典来创建数据源控件参数的信息,请参见数据源控件如何为数据绑定字段创建参数。
在通过处理 RowUpdating 或 RowDeleting 事件将任何这些字典的内容传递到数据源之前,可以对其进行检查或自定义。完成更新或删除后,GridView 控件会引发其 RowUpdated 或 RowDeleted 事件。这些事件允许执行查询后逻辑(如完整性检查)。
在完成更新或删除并引发所有事件之后,GridView 控件将重新绑定到数据源控件以显示已更新的数据。
![]() |
---|
GridView 控件中的可更新字段的原始值存储在 ViewState 中。如果在包含可更新 GridView 控件的 ASP.NET 页上禁用 ViewState,则开放式并发检查无法使用在 GridView 控件第一次绑定到数据源时检索到的可更新和主键字段的原始值。当该页为了执行更新或删除而进行回发时,数据库中的当前值将作为 GridView 控件中的可更新和主键字段的原始值被检索,因为 ViewState 中没有存储任何值。然后使用这些原始值执行更新或删除操作。如果原始值自从第一次填充 GridView 控件以来已更改,则更新或删除将会成功,但是开发式并发检查不会按预期的那样报告错误。 |
在 GridView 控件中自定义编辑用户界面
您可以自定义编辑 (UI) 元素,如在每个数据字段的编辑模式下显示的控件类型。自动双向数据绑定允许自定义控件为数据存储区提供可编辑和已编辑的数据,以及从数据存储区获取可编辑和已编辑的数据。
![]() |
---|
如果更改数据源控件中的更新语句或重新排列 GridView 控件中的列,请始终确保 GridView 控件传递到数据源的值与相应的数据源配置匹配。 |