DataGridViewRowCollection.AddRange(DataGridViewRow[]) 方法

定义

将指定的 DataGridViewRow 对象添加到集合中。

public:
 virtual void AddRange(... cli::array <System::Windows::Forms::DataGridViewRow ^> ^ dataGridViewRows);
public virtual void AddRange (params System.Windows.Forms.DataGridViewRow[] dataGridViewRows);
abstract member AddRange : System.Windows.Forms.DataGridViewRow[] -> unit
override this.AddRange : System.Windows.Forms.DataGridViewRow[] -> unit
Public Overridable Sub AddRange (ParamArray dataGridViewRows As DataGridViewRow())

参数

dataGridViewRows
DataGridViewRow[]

要添加到 DataGridViewRowCollectionDataGridViewRow 对象数组。

例外

dataGridViewRowsnull

dataGridViewRows 只包含一行,并且它包含的这一行的单元格数大于控件中的列数。

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

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

  • 清除所选内容。

- 或 -

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

- 或 -

DataGridViewDataSource 属性不是 null

- 或 -

dataGridViewRows 数组中至少有一个条目为 null

- 或 -

DataGridView 没有列。

- 或 -

dataGridViewRows 数组中至少有一行的 DataGridView 属性值不为 null

- 或 -

dataGridViewRows 数组中至少有一行的 Selected 属性值为 true

- 或 -

dataGridViewRows 数组中的两行或更多行相同。

- 或 -

dataGridViewRows 数组中至少有一行包含与控件中相应列的类型不兼容的类型的一个或多个单元格。

- 或 -

dataGridViewRows 数组中至少有一行包含的单元格数大于控件中的列数。

- 或 -

此操作将在未冻结行之后添加冻结行。

示例

下面的代码示例演示如何在选择新记录的行时使用 AddRange 方法,以解决“备注”部分中指示的 bug。

// Workaround for bug that prevents DataGridViewRowCollection.AddRange
// from working when the row for new records is selected. 
private void AddRows(params DataGridViewRow[] rows)
{
    InsertRows(dataGridView1.RowCount - 1, rows);
}

// 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.AddRange
' from working when the row for new records is selected. 
Private Sub AddRows(ByVal ParamArray rows As DataGridViewRow())
    InsertRows(dataGridView1.RowCount - 1, rows)
End Sub

' 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

注解

如果可能,方法 AddRange 将共享行添加到 DataGridViewRowCollection。 否则,新行将取消共享。 有关详细信息,请参阅 缩放 Windows 窗体 DataGridView 控件的最佳做法

添加新行时,控件中的行不会自动排序。 若要将新行排序到正确的位置,请在事件处理程序中DataGridView.RowsAdded调用 DataGridView.Sort 方法。 你可能还希望在事件处理程序中CellValueChanged调用 DataGridView.Sort 方法,以在用户修改单元格时对行进行排序。

重要

由于 bug, AddRange 如果 AllowUserToAddRows 属性为 true 并且选择了新记录的行,则 方法将使应用程序停止响应。 若要解决此 bug,必须在调用此方法之前取消选择行,然后重新选择该行。 有关详细信息,请参阅本主题中的代码示例。

适用于

另请参阅