DataGridViewRowCollection.AddRange(DataGridViewRow[]) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定した 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オブジェクトの配列。
例外
dataGridViewRows は nullです。
dataGridViewRows には 1 つの行のみが含まれており、その行に含まれる行のセル数は、コントロール内の列よりも多くなります。
関連付けられている DataGridView コントロールは、新しい行の追加を一時的に妨げる次のいずれかのアクションを実行しています。
コントロール内のすべてのセルを選択します。
選択範囲をクリアします。
-又は-
このメソッドは、次のいずれかの DataGridView イベントのハンドラーから呼び出されています。
-又は-
DataGridViewの DataSource プロパティは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 され、新しいレコードの行が選択されている場合、アプリケーションの応答を停止します。 このバグを回避するには、このメソッドを呼び出す前に行の選択を取り消してから、行を再選択する必要があります。 詳細については、このトピックのコード例を参照してください。