DataGridViewRowCollection.AddRange(DataGridViewRow[]) Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Adds the specified DataGridViewRow objects to the collection.
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())
Parameters
- dataGridViewRows
- DataGridViewRow[]
An array of DataGridViewRow objects to be added to the DataGridViewRowCollection.
Exceptions
dataGridViewRows
is null
.
dataGridViewRows
contains only one row, and the row it contains has more cells than there are columns in the control.
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-
This method is being called from a handler for one of the following DataGridView events:
-or-
The DataSource property of the DataGridView is not null
.
-or-
At least one entry in the dataGridViewRows
array is null
.
-or-
The DataGridView has no columns.
-or-
At least one row in the dataGridViewRows
array has a DataGridView property value that is not null
.
-or-
At least one row in the dataGridViewRows
array has a Selected property value of true
.
-or-
Two or more rows in the dataGridViewRows
array are identical.
-or-
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-
At least one row in the dataGridViewRows
array contains more cells than there are columns in the control.
-or-
This operation would add frozen rows after unfrozen rows.
Examples
The following code example demonstrates how to use the AddRange method when the row for new records is selected to work around the bug indicated in the Remarks section.
// 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
Remarks
The AddRange method adds shared rows to the DataGridViewRowCollection, if possible. Otherwise, the new rows are unshared. 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. To sort new rows into their correct position, call the DataGridView.Sort method in a DataGridView.RowsAdded event handler. 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.
Important
Due to a bug, the AddRange method will make your application stop responding if the AllowUserToAddRows property is true
and the row for new records is selected. To work around this bug, you must cancel the selection of the row before calling this method, and then reselect the row. For more information, see the code example in this topic.