Compartilhar via


DataGridViewRowCollection.AddRange(DataGridViewRow[]) Método

Definição

Adiciona os objetos DataGridViewRow especificados à coleção.

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

Parâmetros

dataGridViewRows
DataGridViewRow[]

Uma matriz de objetos DataGridViewRow a serem adicionados ao DataGridViewRowCollection.

Exceções

dataGridViewRows é null.

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 -

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 adicionará as linhas congeladas após as linhas não congeladas.

Exemplos

O exemplo de código a seguir demonstra como usar o AddRange método quando a linha para novos registros é selecionada para contornar o bug indicado na seção Comentários.

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

Comentários

O AddRange 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 AddRange aplicativo pare de responder se a AllowUserToAddRows propriedade for true e a linha de novos registros estiver selecionada. Para contornar esse bug, você deve cancelar a seleção da linha antes de chamar esse método e, em seguida, selecionar novamente a linha. Para obter mais informações, consulte o exemplo de código neste tópico.

Aplica-se a

Confira também