DataGridViewRowCollection.InsertRange(Int32, DataGridViewRow[]) メソッド


コレクション内の指定した位置に DataGridViewRow オブジェクトを挿入します。Inserts the DataGridViewRow objects into the collection at the specified position.

 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())



行を挿入する位置。The position at which to insert the rows.


DataGridViewRow に追加する DataGridViewRowCollection オブジェクトの配列。An array of DataGridViewRow objects to add to the DataGridViewRowCollection.


dataGridViewRowsnullです。dataGridViewRows is null.

rowIndex が 0 未満か、コレクションに含まれる行数を上回っています。rowIndex is less than zero or greater than the number of rows in the collection.

dataGridViewRows が 1 つだけ行を格納し、格納されている行にコントロールの列数を超える数のセルがあります。dataGridViewRows contains only one row, and the row it contains has more cells than there are columns in the control.

関連付けられた DataGridView コントロールが次のいずれかのアクションを実行しているため、一時的に新しい行が追加できない状態にあります。The associated DataGridView control is performing one of the following actions that temporarily prevents new rows from being added: - コントロール内のすべてのセルを選択している。- Selecting all cells in the control.

- 選択範囲をクリアしている。- Clearing the selection.

- または --or- このメソッドは、次のいずれかの DataGridView イベントのハンドラーから呼び出されています。This method is being called from a handler for one of the following DataGridView events:

- または --or- rowIndex はコレクション内の行数と等しく、また AllowUserToAddRowstrueです。rowIndex is equal to the number of rows in the collection and AllowUserToAddRows is true.

- または --or- DataSourceDataGridView プロパティが null ではありません。The DataSource property of the DataGridView is not null.

- または --or- dataGridViewRows 配列内の最低 1 つのエントリが null です。At least one entry in the dataGridViewRows array is null.

- または --or- DataGridView に列がありません。The DataGridView has no columns.

- または --or- dataGridViewRows 配列の最低 1 つの行の DataGridView プロパティに null 以外の値が設定されています。At least one row in the dataGridViewRows array has a DataGridView property value that is not null.

- または --or- dataGridViewRows 配列の最低 1 つの行の Selected プロパティ値が true に設定されています。At least one row in the dataGridViewRows array has a Selected property value of true.

- または --or- dataGridViewRows 配列の 2 つ以上の行が同じです。Two or more rows in the dataGridViewRows array are identical.

- または --or- dataGridViewRows 配列の最低 1 つの行に、コントロール内の対応する列の型と互換性のない型のセルが 1 つ以上含まれています。At least one row in the dataGridViewRows array contains one or more cells of a type that is incompatible with the type of the corresponding column in the control.

または-or- dataGridViewRows 配列の最低 1 つの行に、コントロールの列数を超える数のセルがあります。At least one row in the dataGridViewRows array contains more cells than there are columns in the control.

- または --or- この操作を実行すると、固定されていない行の後に固定された行が挿入されるか、または固定された行の前に固定されていない行が挿入されます。This operation would insert frozen rows after unfrozen rows or unfrozen rows before frozen rows.

次のコード例は、 InsertRangeメソッドを使用して、「解説」で示したバグを回避するために、選択した行の前に行を挿入する方法を示しています。The following code example demonstrates how to use the InsertRange method to insert rows before selected rows to work around the bug indicated in the Remarks section.

// 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)
            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
            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であれば、に共有行を追加します。The InsertRange method adds shared rows to the DataGridViewRowCollection, if possible. それ以外の場合、新しい行は共有されません。Otherwise, the new rows are unshared. 詳細については、「 Windows フォーム DataGridView コントロールを拡張するための推奨される手順」を参照してください。For more information, see Best Practices for Scaling the Windows Forms DataGridView Control.

新しい行が追加されると、コントロール内の行は自動的に並べ替えられません。Rows in the control are not automatically sorted when new rows are added. 新しい行を正しい位置に並べ替えるには、 DataGridView.Sort DataGridView.RowsAddedイベントハンドラーでメソッドを呼び出します。To sort new rows into their correct position, call the DataGridView.Sort method in a DataGridView.RowsAdded event handler. また、ユーザーがセルを変更DataGridView.SortしたときCellValueChangedに行を並べ替えるために、イベントハンドラーでメソッドを呼び出すこともできます。You might also want to call the DataGridView.Sort method in a CellValueChanged event handler to sort the rows when the user modifies a cell.


バグのため、インデックスのInsertRange値がよりrowIndex大きい行が選択されていると、メソッドによってアプリケーションが応答を停止します。Due to a bug, the InsertRange method will make your application stop responding if any rows with an index greater than rowIndex are selected. このバグを回避するには、このメソッドを呼び出す前に、これらの行の選択をキャンセルし、後で行を再選択する必要があります。To work around this bug, you must cancel the selection of these rows before calling this method, and reselect the rows afterward. 詳細については、このトピックのコード例を参照してください。For more information, see the code example in this topic.