Compartilhar via


DataGridViewRowCollection.InsertRange(Int32, DataGridViewRow[]) Método

Definição

Insere os objetos DataGridViewRow na coleção na posição indicada.

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())

Parâmetros

rowIndex
Int32

A posição na qual inserir as linhas.

dataGridViewRows
DataGridViewRow[]

Uma matriz de objetos DataGridViewRow a serem adicionados ao DataGridViewRowCollection.

Exceções

dataGridViewRows é null.

rowIndex é menor que zero ou maior que o número de linhas na coleção.

dataGridViewRows contém somente uma linha e a linha que ele contém tem mais células do que as colunas no controle.

O controle DataGridView associado está executando uma das seguintes ações, que impedem temporariamente que novas linhas sejam adicionadas:

  • Selecionar todas as células no controle.

  • Limpar a seleção.

- ou -

Esse método está sendo chamado de um manipulador para um dos seguintes eventos DataGridView:

- ou -

rowIndex é igual ao número de linhas na coleção e AllowUserToAddRows é true.

- ou -

A propriedade DataSource do DataGridView não é null.

- ou -

Pelo menos uma entrada na matriz dataGridViewRows é null.

- ou -

O DataGridView não tem colunas.

- ou -

Pelo menos uma linha da matriz dataGridViewRows tem um valor da propriedade DataGridView que não é null.

- ou -

Pelo menos uma linha da matriz dataGridViewRows tem um valor da propriedade Selected de true.

- ou -

Duas ou mais linhas na matriz dataGridViewRows são idênticas.

- ou -

Pelo menos uma linha da matriz dataGridViewRows contém uma ou mais células de um tipo incompatível com o tipo da coluna correspondente no controle.

- ou -

Pelo menos uma linha da matriz dataGridViewRows contém mais células do que as colunas no controle.

- ou -

Essa operação poderia inserir linhas congeladas após as linhas não congeladas ou descongelar linhas antes de linhas congeladas.

Exemplos

O exemplo de código a seguir demonstra como usar o InsertRange método para inserir linhas antes das linhas selecionadas para contornar o bug indicado na seção Comentários.

// 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

Comentários

O InsertRange método adiciona linhas compartilhadas ao DataGridViewRowCollection, se possível. Caso contrário, as novas linhas não serão compartilhadas. Para obter mais informações, consulte Práticas recomendadas para colocação em escala do controle DataGridView dos Windows Forms.

As linhas no controle não são classificadas automaticamente quando novas linhas são adicionadas. Para classificar novas linhas em sua posição correta, chame o DataGridView.Sort método em um DataGridView.RowsAdded manipulador de eventos. Talvez você também queira chamar o DataGridView.Sort método em um CellValueChanged manipulador de eventos para classificar as linhas quando o usuário modificar uma célula.

Importante

Devido a um bug, o método fará com que seu InsertRange aplicativo pare de responder se qualquer linha com um índice maior que rowIndex estiver selecionada. Para contornar esse bug, você deve cancelar a seleção dessas linhas antes de chamar esse método e selecionar novamente as linhas posteriormente. Para obter mais informações, consulte o exemplo de código neste tópico.

Aplica-se a

Confira também