DataGridViewRowCollection.InsertRange(Int32, DataGridViewRow[]) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.