次の方法で共有


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 つの行に、nullされていないDataGridViewプロパティ値があります。

-又は-

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

Important

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

適用対象

こちらもご覧ください