DataGridViewRowCollection.InsertRange(Int32, DataGridViewRow[]) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将 DataGridViewRow 对象插入集合中的指定位置。
public:
virtual void InsertRange(int rowIndex, ... cli::array <System::Windows::Forms::DataGridViewRow ^> ^ dataGridViewRows);
public virtual void InsertRange (int rowIndex, params System.Windows.Forms.DataGridViewRow[] dataGridViewRows);
abstract member InsertRange : int * System.Windows.Forms.DataGridViewRow[] -> unit
override this.InsertRange : int * System.Windows.Forms.DataGridViewRow[] -> unit
Public Overridable Sub InsertRange (rowIndex As Integer, ParamArray dataGridViewRows As DataGridViewRow())
参数
- rowIndex
- Int32
要插入行的位置。
- dataGridViewRows
- DataGridViewRow[]
要添加到 DataGridViewRowCollection 中的 DataGridViewRow 对象的数组。
例外
dataGridViewRows
为 null
。
rowIndex
小于零或大于集合中的行数。
dataGridViewRows
只包含一行,并且它包含的这一行的单元格数大于控件中的列数。
关联的 DataGridView 控件正在执行以下操作之一,该操作暂时禁止添加新行:
选择控件中的所有单元格。
清除所选内容。
- 或 -
正在从以下 DataGridView 事件之一的处理程序调用此方法:
- 或 -
rowIndex
等于集合中的行数,且 AllowUserToAddRows 为 true
。
- 或 -
DataGridView 的 DataSource 属性不是 null
。
- 或 -
dataGridViewRows
数组中至少有一个条目为 null
。
- 或 -
DataGridView 没有列。
- 或 -
dataGridViewRows
数组中至少有一行的 DataGridView 属性值不为 null
。
- 或 -
dataGridViewRows
数组中至少有一行的 Selected 属性值为 true
。
- 或 -
dataGridViewRows
数组中的两行或更多行相同。
- 或 -
dataGridViewRows
数组中至少有一行包含与控件中相应列的类型不兼容的类型的一个或多个单元格。
- 或 -
dataGridViewRows
数组中至少有一行包含的单元格数大于控件中的列数。
- 或 -
此操作在未冻结的行之后插入一些冻结的行,或在冻结的行之前插入一些未冻结的行。
示例
下面的代码示例演示如何使用 InsertRange 方法在所选行之前插入行,以解决“备注”部分中指示的 bug。
// Workaround for bug that prevents DataGridViewRowCollection.InsertRange
// from working when any rows before the insertion index are selected.
private void InsertRows(int index, params DataGridViewRow[] rows)
{
System.Collections.Generic.List<int> selectedIndexes =
new System.Collections.Generic.List<int>();
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
if (row.Index >= index)
{
selectedIndexes.Add(row.Index);
row.Selected = false;
}
}
dataGridView1.Rows.InsertRange(index, rows);
foreach (int selectedIndex in selectedIndexes)
{
dataGridView1.Rows[selectedIndex].Selected = true;
}
}
' Workaround for bug that prevents DataGridViewRowCollection.InsertRange
' from working when any rows before the insertion index are selected.
Private Sub InsertRows(ByVal index As Integer, _
ByVal ParamArray rows As DataGridViewRow())
Dim selectedIndexes As New System.Collections.Generic.List(Of Integer)
For Each row As DataGridViewRow In dataGridView1.SelectedRows
If row.Index >= index Then
selectedIndexes.Add(row.Index)
row.Selected = False
End If
Next row
dataGridView1.Rows.InsertRange(index, rows)
For Each selectedIndex As Integer In selectedIndexes
dataGridView1.Rows(selectedIndex).Selected = True
Next selectedIndex
End Sub
注解
如果可能,方法 InsertRange 将共享行添加到 DataGridViewRowCollection。 否则,新行将取消共享。 有关详细信息,请参阅 缩放 Windows 窗体 DataGridView 控件的最佳做法。
添加新行时,控件中的行不会自动排序。 若要将新行排序到正确的位置,请在事件处理程序中DataGridView.RowsAdded调用 DataGridView.Sort 方法。 你可能还希望在事件处理程序中CellValueChanged调用 DataGridView.Sort 方法,以在用户修改单元格时对行进行排序。
重要
由于 bug, InsertRange 如果选择了索引大于 rowIndex
的任何行,方法将使应用程序停止响应。 若要解决此 bug,必须在调用此方法之前取消选择这些行,并在之后重新选择这些行。 有关详细信息,请参阅本主题中的代码示例。