1.不显示最下面的新行

通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * )。如果不想让用户新追加行即不想显示该新行,可以将 DataGridView 对象的 AllowUserToAddRows 属性设置为 False。

DataGridView1.AllowUserToAddRows = false;

但是,可以通过程序: DataGridViewRowCollection.Add 为 DataGridView 追加新行。

2. 为生成的新行添加默认值

当用户选择“新行”作为当前行,DataGridView会触发DefaultValuesNeeded事件。在该事件中可以访问新行,并为其生成默认值,为用户输入提供方便。

private void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
e.Row.Cells["Region"].Value = "WA";
e.Row.Cells["City"].Value = "Redmond";
e.Row.Cells["PostalCode"].Value = "98052-6399";
e.Row.Cells["Region"].Value = "NA";
e.Row.Cells["Country"].Value = "USA";
e.Row.Cells["CustomerID"].Value = NewCustomerId();
}

3.在新行中输入数据

用户开始在新行输入数据之前,新行的IsNewRow属性值为true,即第一次触发改行的CellEnter和CellBeginEdit事件中IsNewRow事件为Ture。 一旦用户开始输入,这一行就不再是新行了,DataGridView中会产生一个“新”的新行,看下面示意图:

WinForm:DataGridView新增加行-LMLPHP

在添加“新”的新行时,会触发UserAddedRow事件,它的事件处理函数的第二个参数有属性Row,指定了这个“新”的新行。如果用户此时按下Escape键,“新”的新行会被移除,这会触发UserDeletingRow事件,它的事件处理函数的第二个参数的属性Row指定了“新”的新行。

4. 自定义新行的可视化效果

  • 新行是基于RowTemplate模板创建的,如果没有指定它的单元格的样式,它们会采用继承的样式。
  • 新行中单元格的初始值是由每个单元格的DefaultNewRowValue属性决定的。对于DataGridViewImageCell类型的单元格,其初始值为一个占位图片,其它类型的则为null。你可以重 写这个属性以返回自定义值。但也可以在DefaultValuesNeeded事件处理函数中对默认值进行替换,该事件在焦点进入新行时触发。
  • 新行标题的标准图标是箭头或者星号,并没有得到暴露。如果你要自定义这个图标,就需要创 建一个自定义的DataGridViewRowHeaderCell 类。
  • 新行的标题的标准图标使用标题单元格DataGridViewCellStyle的ForeColor属性。注意:如果没有足够的空间,图标就不会再显示。
  • 如果为标题单元格设置了字符串值(通过Value属性),但没有足够的控件同时显示文本和图标,那么图标会被首先截掉。

5. 新行的排序

  • 在非绑定模式下,新行总是添加在DataGridView的最后一行,即使已经对数据排序。用户需要在添加新行后会“自动”再次进行排序,以将新记录放在合适的位置;这种行为方式类似于ListView控件。
  • 在绑定模式或虚拟模式(Virtual Mode)下,如果已对数据排序,那么插入数据时的行为取决于数据模型的实现方式。对于ADO.NET,新加的行会被自动排序至合适的位置。
05-06 21:41