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[]

DataGridViewRowCollection に追加する DataGridViewRow オブジェクトの配列。

例外

dataGridViewRowsnullです。

dataGridViewRows に含まれるのは 1 行のみであり、そこに含まれる行に、コントロール内の列数よりも多くのセルが含まれています。

関連付けられている DataGridView コントロールによって、新しい行の追加を一時的に妨げる次の操作のいずれかが実行されています。

  • コントロール内のすべてのセルを選択します。

  • 選択範囲をクリアします。

- または -

このメソッドは、次のいずれかの DataGridView イベントのハンドラーから呼び出されています。

- または -

DataGridViewDataSource プロパティが null ではありません。

- または -

dataGridViewRows 配列の中の少なくとも 1 つのエントリが null です。

- または -

DataGridView に列がありません。

- または -

dataGridViewRows 配列の中の少なくとも 1 つの行の DataGridView プロパティ値が null ではありません。

- または -

dataGridViewRows 配列の中の少なくとも 1 つの行の Selected プロパティ値が true です。

- または -

dataGridViewRows 配列の中に 2 つ以上の同一の行があります。

- または -

dataGridViewRows 配列の中の少なくとも 1 つの行に、コントロール内の対応する列の型と互換性のない型の 1 つ以上のセルが含まれています。

- または -

dataGridViewRows 配列の中の少なくとも 1 つの行に、コントロール内の列数よりも多くのセルが含まれています。

- または -

この操作は、固定されていない行の後に固定された行を追加します。

次のコード例では、新しいレコードの行が選択されている場合に メソッドを使用 AddRange して、「解説」セクションに示されているバグを回避する方法を示します。

// 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します。 また、イベント ハンドラーで メソッドを DataGridView.Sort 呼び出して、 CellValueChanged ユーザーがセルを変更したときに行を並べ替えることもできます。

重要

バグが原因で、 AddRange プロパティが で新しいレコードの行が選択されている場合 AllowUserToAddRows 、 メソッドは true アプリケーションの応答を停止します。 このバグを回避するには、このメソッドを呼び出す前に行の選択を取り消してから、行を再選択する必要があります。 詳細については、このトピックのコード例を参照してください。

適用対象

こちらもご覧ください