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

Definição

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

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 DataGridViewRow objetos 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 apenas uma linha e a linha que ela contém tem mais células do que colunas no controle.

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

  • Selecionando todas as células no controle.

  • Desmarcando a seleção.

-ou-

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

-ou-

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

-ou-

A DataSource propriedade do DataGridView não nullé .

-ou-

Pelo menos uma entrada na dataGridViewRows matriz é null.

-ou-

Não DataGridView tem colunas.

-ou-

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

-ou-

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

-ou-

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

-ou-

Pelo menos uma linha na dataGridViewRows matriz 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 na dataGridViewRows matriz contém mais células do que colunas no controle.

-ou-

Essa operação inseriria linhas congeladas após linhas descongeladas ou linhas descongeladas 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 As práticas recomendadas para dimensionar o 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 houver linhas com um índice maior que rowIndex as selecionadas. Para contornar esse bug, você deve cancelar a seleção dessas linhas antes de chamar esse método e reelecionar as linhas posteriormente. Para obter mais informações, consulte o exemplo de código neste tópico.

Aplica-se a

Confira também