在 Windows 窗体 DataGridView 控件中使用新记录行

更新:2007 年 11 月

在应用程序中使用 DataGridView 编辑数据时,经常希望使用户能够向数据存储区添加新的数据行。DataGridView 控件通过为新记录提供一行(总是显示为最后一行)来支持此功能。该行在其行标头中用星号 (*) 标记。以下各节讨论在启用新记录行后编程时应考虑的一些问题。

显示新记录行

使用 AllowUserToAddRows 属性可指示是否显示新记录行。此属性的默认值为 true。

对于数据绑定的情况,如果控件的 AllowUserToAddRows 属性和数据源的 IBindingList.AllowNew 属性均为 true,则将显示新记录行。如果其中的一个属性为 false,则不显示该行。

用默认数据填充新记录行

当用户选择新记录行作为当前行时,DataGridView 控件引发 DefaultValuesNeeded 事件。

此事件提供对新 DataGridViewRow 的访问,并使您能够用默认数据填充该新行。有关更多信息,请参见如何:为 Windows 窗体 DataGridView 控件中的新行指定默认值

行集合

新记录行包含在 DataGridView 控件的 Rows 集合中,但在两个方面具有不同的行为:

新记录行的视觉自定义

创建新记录行时,新记录行基于由 RowTemplate 属性指定的行。没有为此行指定的任何单元格样式都将从其他属性继承。有关单元格样式继承的更多信息,请参见 Windows 窗体 DataGridView 控件中的单元格样式

新记录行中的单元格显示的初始值是从每个单元格的 DefaultNewRowValue 属性检索得到的。对于类型为 DataGridViewImageCell 的单元格,此属性返回一个占位符图像。对于其他类型的单元格,此属性返回 null。可以重写此属性以返回自定义值。但是,当焦点进入新记录行时,这些初始值可以被 DefaultValuesNeeded 事件处理程序替换。

用于此行标头的标准图标(箭头或星号)不是公开的。如果要自定义这些图标,需要创建一个自定义的 DataGridViewRowHeaderCell 类。

标准图标使用行标头单元格所使用的 DataGridViewCellStyleForeColor 属性。如果没有完整显示所需的足够空间,就不呈现这些标准图标。

如果行标头单元格已设置了字符串值,并且没有足够的空间既显示文本又显示图标,则首先放弃图标。

排序

在取消绑定模式中,即使用户已对 DataGridView 的内容排序,也总是将新记录添加到 DataGridView 的末尾。用户将需要重新应用该排序以便将该行排列到正确的位置;此行为类似于 ListView 控件的行为。

在数据绑定和虚拟模式中,应用了排序以后的插入行为将取决于数据模型的实现。对于 ADO.NET,将立刻将该行排列到正确的位置。

关于新记录行的其他说明

不能将此行的 Visible 属性设置为 false。如果试图执行此操作,将引发 InvalidOperationException

新记录行总是在未选中状态下创建。

虚拟模式

如果要实现虚拟模式,您需要对以下情况进行跟踪:在数据模型中何时需要新记录行;何时回滚该行的添加操作。此功能的正确实现取决于数据模型的实现及其事务语义,例如,提交范围是在单元格级还是在行级。有关更多信息,请参见 Windows 窗体 DataGridView 控件中的虚拟模式

请参见

任务

如何:为 Windows 窗体 DataGridView 控件中的新行指定默认值

参考

DataGridView

DataGridView.DefaultValuesNeeded

其他资源

Windows 窗体 DataGridView 控件中的数据输入