65.9K
CodeProject 正在变化。 阅读更多。
Home

一个可插入行的扩展 GridView

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.51/5 (12投票s)

2006 年 2 月 23 日

Ms-RL

3分钟阅读

viewsIcon

177606

downloadIcon

3261

另一个可插入的 ASP.NET GridView 控件。

Insertable gridview

引言

本文描述了(另一个)可插入的 GridView。您可能知道 GridView 控件是 ASP.NET v.2 中用于显示和编辑表格数据的首选控件。尽管 GridView 比以前的 DataGrid 控件有所改进,但它仍然缺乏插入新行的能力。 Microsoft 表示您可以使用 FormViewDetailsView 组件来插入新行。但是,通常在适当的位置添加新行会很方便。我提供的修改后的 Web 服务器 GridView 控件通过在页脚行中添加“加号”图像使这成为可能。按下时,会将具有默认值的新行添加到数据库,并且网格在最后一页的底部以编辑模式显示新行(参见下图)。如果按下“取消”按钮,则会从数据库中删除新行。编辑新行后,将恢复 GridView 的排序。

Insertable gridview when a new row is added

除了插入功能外,代码还会自动在网格的第一列中为选择、编辑和删除操作添加按钮图像。

使用代码

修改后的控件被实现为继承 GridView 控件的自定义服务器控件。要使用它,请添加对 *PSControls.dll* 文件或 *PSControls* 项目的引用。如果您使用该项目,您可以进一步自定义控件,还可以通过创建 *Messages.XX.resx* (其中 *XX* 是您的语言)来本地化控件消息。

然后,在您的 *.aspx* 窗体上放置一个 PSGridView 控件,并使用智能标签菜单对其进行配置。第一个字段(列)必须是一个空的 TemplateField,因为代码会在那里创建添加、选择、编辑、删除、更新和取消按钮。下面显示了使用 Visual Studio 2005 配置字段的示例

Insertable gridview columns

您可以通过分别设置控件的布尔值 CanAddCanSelectCanEditCanDelete 自定义属性来确定是否创建添加、选择、编辑和删除按钮。此外,您可以通过将 IsEditable 属性设置为 False 来禁用所有编辑按钮。默认情况下,所有这些属性都设置为 True

按下“添加”按钮时,该控件会将新行添加到数据库。因此,如果您要插入的表具有“not null”列,则会引发异常,除非您在数据源控件的 Inserting 事件中为这些列设置默认值。下面是一个示例

Protected Sub sqlCustomers_Inserting(ByVal sender As Object, _
      ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) _
      Handles sqlCustomers.Inserting
    e.Command.Parameters("@CustomerType").Value = "S"
End Sub

要使图像像示例中一样显示,请将演示的 *images* 文件夹复制到您的 Web 应用程序的根目录。或者,通过 AddImageUrlEditImageUrlDelImageUrlSelImageUrlUpdateImageUrlCancelImageUrl 属性指定您自己的图像。

更新:在最初发布后,我意识到只有在新行的主键始终递增的情况下,插入功能才能正常工作。这可以通过定义一个自增主键列来轻松实现,例如, ID int NOT NULL IDENTITY(1,1) PRIMARY KEY, ...。此外,您必须创建一个空模板,以便在表没有行时显示加号图标。您可以使用 Visual Studio 完成此操作,也可以通过将 <EmptyDataTemplate></EmptyDataTemplate> 标签插入到控件声明中。

历史

  • 1.0 版 - 基本的可插入行功能。编辑控件。
  • 1.01 版 - 更新,以便在 PreRender 事件处理程序上更改 CanXXX 属性后对控件生效。
© . All rights reserved.