如何将 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 编辑。
