DataGridViewRowCollection.InsertRange(Int32, DataGridViewRow[]) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вставляет объекты DataGridViewRow в коллекцию в указанной позиции.
public:
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())
Параметры
- rowIndex
- Int32
Позиция, в которую нужно вставить строки.
- dataGridViewRows
- DataGridViewRow[]
Массив объектов DataGridViewRow, которые требуется добавить в DataGridViewRowCollection.
Исключения
dataGridViewRows
имеет значение null
.
Значение rowIndex
меньше нуля или больше количества строк в коллекции.
Коллекция dataGridViewRows
содержит только одну строку, а эта строка содержит больше ячеек, чем в элементе управления находится столбцов.
Связанный элемент управления DataGridView выполняет одно из следующих действий, которое временно предотвращает добавление новых строк:
Выделение всех ячеек в элементе управления .
Очистка выделенного фрагмента.
-или-
Этот метод вызывается из обработчика для одного из следующих событий DataGridView:
-или-
rowIndex
равно числу строк в коллекции, а AllowUserToAddRows равно true
.
-или-
Свойство DataSource параметра DataGridView не равно null
.
-или-
По меньшей мере одна запись в массиве dataGridViewRows
имеет значение null
.
-или-
Таблица DataGridView не содержит столбцов.
-или-
По крайней мере одна строка в массиве dataGridViewRows
имеет значение свойства DataGridView, не равное null
.
-или-
По крайней мере одна строка в массиве dataGridViewRows
имеет значение свойства Selected, равное true
.
-или-
Две или несколько строк в массиве dataGridViewRows
совпадают.
-или-
По крайней мере одна строка в массиве dataGridViewRows
содержит одну или несколько ячеек, имеющих тип, не совместимый с типом соответствующего столбца в элементе управления.
-или-
По меньшей мере одна строка в массиве dataGridViewRows
содержит ячеек больше, чем в элементе управления находится столбцов.
-или-
Эта операция вставляет зафиксированные строки после незафиксированных либо вставляет незафиксированные строки перед зафиксированными.
Примеры
В следующем примере кода показано, как использовать InsertRange метод для вставки строк перед выбранными строками, чтобы обойти ошибку, указанную в разделе Примечания.
// 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.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
Комментарии
Метод InsertRange добавляет общие строки в DataGridViewRowCollection, если это возможно. В противном случае новые строки будут удалены. Подробнее см. в разделе Масштабирование элемента управления DataGridView в Windows Forms.
Строки в элементе управления не сортируются автоматически при добавлении новых строк. Чтобы отсортировать новые строки в правильное положение, вызовите DataGridView.Sort метод в обработчике DataGridView.RowsAdded событий. Также может потребоваться вызвать DataGridView.Sort метод в обработчике CellValueChanged событий для сортировки строк, когда пользователь изменяет ячейку.
Важно!
Из-за ошибки метод приведет к тому, что приложение перестанет отвечать на запросы, InsertRange если выбраны строки с индексом, превышающим rowIndex
значение . Чтобы обойти эту ошибку, необходимо отменить выделение этих строк перед вызовом этого метода, а затем повторно выбрать строки. Дополнительные сведения см. в примере кода в этом разделе.