DataGridViewRowCollection.InsertRange(Int32, DataGridViewRow[]) 方法

定义

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

例外

dataGridViewRowsnull

rowIndex 小于零或大于集合中的行数。

dataGridViewRows 仅包含一行,并且它包含的单元格数超过控件中的列数。

关联的 DataGridView 控件正在执行下列操作之一,暂时阻止添加新行:

  • 选择控件中的所有单元格。

  • 清除所选内容。

-或-

此方法是从以下事件之一 DataGridView 的处理程序调用的:

-或-

rowIndex 等于集合中的行数,为 AllowUserToAddRowstrue.

-或-

DataSource属性DataGridView不是 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.Sort 事件处理程序中的 DataGridView.RowsAdded 方法。 你可能还想要在事件处理程序中DataGridView.Sort调用CellValueChanged该方法,以在用户修改单元格时对行进行排序。

Important

由于 bug, InsertRange 此方法会使应用程序停止响应(如果所选的索引大于 rowIndex 任何行)。 若要解决此 bug,必须在调用此方法之前取消选择这些行,然后重新选择这些行。 有关详细信息,请参阅本主题中的代码示例。

适用于

另请参阅