Partager via


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

Définition

Insère les objets DataGridViewRow dans la collection au niveau de la position spécifiée.

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

Paramètres

rowIndex
Int32

Position à laquelle insérer les lignes.

dataGridViewRows
DataGridViewRow[]

Tableau d’objets DataGridViewRow à ajouter à DataGridViewRowCollection.

Exceptions

dataGridViewRows a la valeur null.

rowIndex est inférieur à zéro ou supérieur au nombre de lignes dans la collection.

dataGridViewRows contient une seule ligne et la ligne qu’il contient possède plus de cellules qu’il n’y a de colonnes dans le contrôle.

Le contrôle DataGridView associé exécute l’une des opérations suivantes qui empêche temporairement l’ajout de nouvelles lignes :

  • Sélection de toutes les cellules dans le contrôle.

  • Suppression de la sélection.

- ou -

Cette méthode est appelée à partir d’un gestionnaire d’un des événements DataGridView suivants :

- ou -

rowIndex est égal au nombre de lignes dans la collection et AllowUserToAddRows a la valeur true.

- ou -

La propriété DataSource de DataGridView n’est pas null.

- ou -

Au moins une entrée du tableau dataGridViewRows est null.

- ou -

DataGridView ne possède aucune colonne.

- ou -

Au moins une ligne du tableau dataGridViewRows a une valeur de propriété DataGridView qui n’est pas null.

- ou -

Au moins une ligne du tableau dataGridViewRows a une valeur de propriété Selected de true.

- ou -

Plusieurs lignes du tableau dataGridViewRows sont identiques.

- ou -

Au moins une ligne du tableau dataGridViewRows contient une ou plusieurs cellules dont le type n’est pas compatible avec le type de la colonne correspondante dans le contrôle.

- ou -

Au moins une ligne du tableau dataGridViewRows contient plus de cellules qu’il n’y a de colonnes dans le contrôle.

- ou -

Cette opération insère des lignes figées après des lignes non figées ou des lignes non figées avant des lignes figées.

Exemples

L’exemple de code suivant montre comment utiliser la InsertRange méthode pour insérer des lignes avant les lignes sélectionnées afin de contourner le bogue indiqué dans la section Remarques.

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

Remarques

La InsertRange méthode ajoute des lignes partagées au DataGridViewRowCollection, si possible. Sinon, les nouvelles lignes ne sont pas partagées. Pour plus d'informations, consultez Meilleures pratiques pour la mise à l'échelle du contrôle DataGridView Windows Forms.

Les lignes du contrôle ne sont pas triées automatiquement lorsque de nouvelles lignes sont ajoutées. Pour trier les nouvelles lignes dans leur position correcte, appelez la DataGridView.Sort méthode dans un gestionnaire d’événements DataGridView.RowsAdded . Vous pouvez également appeler la DataGridView.Sort méthode dans un gestionnaire d’événements CellValueChanged pour trier les lignes lorsque l’utilisateur modifie une cellule.

Important

En raison d’un bogue, la InsertRange méthode empêche votre application de répondre si des lignes dont l’index est supérieur rowIndex à sont sélectionnées. Pour contourner ce bogue, vous devez annuler la sélection de ces lignes avant d’appeler cette méthode, puis réélectionner les lignes par la suite. Pour plus d’informations, consultez l’exemple de code de cette rubrique.

S’applique à

Voir aussi