如何将 DataGrid 转换为数据录入表单






3.45/5 (33投票s)
2004年9月16日
5分钟阅读

245676

9114
本文介绍如何将 DataGrid 转换为用于录入同类数据的录入表单。
引言
DataGrid
不仅仅是一个简单的数据展示控件,通过其内置的各种属性,我们可以在商业应用程序中使用它。DataGrid
控件支持重复数据的显示,例如数据库报表和查询。DataGrid
控件被渲染为一个表格,并包含许多允许您自定义外观和丰富控件整体功能的特性。
背景
在本示例中,我使用了 DataGrid
的模板列编辑属性,并对 DataGrid
进行了修改,使其能够轻松地将数据录入到 DataGrid
内部的控件中,并从中检索值,从而使 DataGrid
看起来像一个同类数据的录入表单。
示例应用程序的截图如下所示。
该示例使用了 SQL Server 2000 数据库,连接字符串放在 Web.Config 文件中。这样做的优点是,即使更改 .config 文件中的数据库连接字符串,应用程序也能在不重新编译的情况下执行。数据库设计也在下面进行说明。示例代码下载也有 C# 和 Visual Basic .NET 版本。
DataGrid 编辑
DataGrid
提供了 EditCommandColumn
控件用于编辑。EditCommandColumn
控件会在 DataGrid
中添加一个新列,并在每行旁边放置一个编辑按钮。点击该按钮会触发回发并激发 EditCommand
事件。我们需要编写代码来处理此事件。
<Columns>
<asp:EditCommandColumn EditText="Edit" ID="DataGrid1"
ButtonType="PushButton"
UpdateText="Update" CancelText="Cancel" />
</Columns>
EditCommandColumn
控件的 ButtonType
包括默认的 LinkButton
和 PushButton
。DataGrid
的 EditItemIndex
属性指定了正在编辑的 DataGrid
的哪一行。DataGrid
无法自行编辑数据,因此当点击编辑按钮时,我们必须编写代码在 EditCommand
事件处理程序中进行处理。EditCommand
事件处理程序是当点击编辑按钮时激发的 DataGrid
事件处理程序。此事件处理程序只需将 EditItemIndex
属性设置为点击了编辑按钮的行,然后重新绑定 DataGrid
。DataGrid
行的编号从 0 开始,默认情况下,EditItemIndex
的值为 -1。
DataGrid1.EditItemIndex = e.Item.ItemIndex;
取消按钮用于在不保存任何更改的情况下将 DataGrid
返回到非编辑状态。取消按钮还会激发 CancelCommand
事件。在代码隐藏中,我们需要将 EditItemIndex
属性设置为 -1 并重新绑定 DataGrid
控件。
更新按钮在被点击时会激发 UpdateCommand
事件。DataGrid
不提供任何更新功能,更新的责任在于我们。更新按钮的事件处理程序接受两个传入参数:一个 Object
和一个 DataGridCommandEventArgs
。DataGridCommandEventArgs
参数包含一个 PropertyItem
,它是与点击了更新按钮的 DataGrid
行对应的 DataGridItem
的一个实例。此 DataGridItem
对象包含一个 Cells
集合,可以迭代此集合以检索 DataGrid
各列的文本或控件。为了确定用户输入的值,我们必须使用 DataGridItem
对象。
数据库
考虑一家软件公司的员工表,它存储了所有员工记录。可以使用以下 CREATE TABLE
语句创建该表。
CREATE TABLE [dbo].[EMPLOYEEDETAILS] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[NAME] [char] (20) NULL ,
[DESIGNATION] [char] (20) NULL ,
[SEX] [char] (20) NULL ,
[AGE] [int] NULL ,
[SALARY] [decimal](18, 0) NULL
) ON [PRIMARY]
GO
您可以在新数据库或任何现有数据库中创建上述表格。示例应用程序中的 DataGrid
将与上述表格进行绑定。
代码工作原理?
要将 DataGrid
转换为数据录入表单,请定义一个编辑模板,并在列单元格中填充所需的 HTML 控件和代码,以实现有效的数据录入。在示例应用程序中,我使用了不同的图像来代替编辑、取消和更新按钮。
<asp:TemplateColumn HeaderText="AGE">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemTemplate>
<asp:label runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "AGE") %>'
ID="Label3" />
</ItemTemplate>
<EditItemTemplate>
<asp:textbox runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "AGE") %>'
ID="Textbox2" />
</EditItemTemplate>
</asp:TemplateColumn>
ItemTemplate
是标识用于正常渲染的 HTML 模板的关键字。AlternatingItemTemplate
是用于渲染偶数位置行的模板名称。对于正在编辑的行,模板名称是 EditTemplateName
。模板列必须有机会定义其单元格在所有可能情况下如何渲染。这包括正常和交替项,以及行被选中或编辑时的项的外观。
ASP.NET 数据绑定技术允许您将内联控件(如 Label
或 TextBox
)与来自数据源的文本关联起来。由于我们必须从 EditItemTemplate
中的控件检索当前值,因此我们必须为控件分配唯一的 ID。数据绑定可以减少与服务器的往返次数,因为一旦下载了请求的数据,通常就不需要与服务器进行交互了。数据源可以是实现 System.Collection.ICollection
接口的任何对象。
DataBinder.Eval(Container.DataItem, fieldname);
DataSource='<%# ListOfDesignations()%>
DataBinder
类提供了一个静态方法 Eval
,它使用反射在运行时解析和评估对象上的数据绑定表达式。ASP.NET <%#
语法将 Eval
返回的值绑定到 Control
或 DataGrid
单元格。本地函数 ListOfDesignations
必须返回一个派生自 ICollection
的类型,因为这是 DataSource
属性期望接收的内容。
取消按钮和编辑按钮的工作方式与前面解释的普通 DataGrid
相同,但要更新可编辑 DataGrid
的内容,我们必须从涉及更新的控件中检索最新信息。我们可以在 Datagrid1_Update
中编写代码,使用以下任何一种方法从控件中检索值:
TextBox tb = (TextBox) e.Item.FindControl("Textbox2");
或者
TextBox tb = (TextBox) e.Item.Cells(2).Controls(0);
我们可以通过列的零基序数位置来引用每个控件。由于我们使用了模板进行编辑,控件是由我们生成的,我们知道必要的 ID。FindControl
是 Control
类的一个方法,用于搜索具有指定名称的子控件。
在此示例中,编辑按钮用于通过数据库的 ID 字段处理新条目和编辑。如果 ID 为 null,则可以得出结论用户正在输入新数据,并且 ID 字段在 DataGrid
中被设置为只读,以便用户无法编辑 ID。
结论
DataGrid
控件的用途不仅限于数据展示,还可以通过简单的代码行实现编辑功能。我希望本文能帮助您更深入地了解 DataGrid
编辑。