Поделиться через


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 значение . Чтобы обойти эту ошибку, необходимо отменить выделение этих строк перед вызовом этого метода, а затем повторно выбрать строки. Дополнительные сведения см. в примере кода в этом разделе.

Применяется к

См. также раздел