1 votes

DataGridView CurrentRow exclut la nouvelle ligne

Je veux obtenir l'index de la ligne actuelle de mon DataGridView. Le problème est que, si la ligne actuelle est la nouvelle ligne, CurrentRow est défini comme la dernière ligne qui n'est pas la nouvelle ligne. Je ne peux pas vérifier si les rangées sont sélectionnées car si une rangée est sélectionnée, cela ne signifie pas qu'il s'agit de la rangée actuelle et la rangée actuelle n'est pas nécessairement sélectionnée.

Je peux obtenir l'index de la nouvelle ligne, mais comment puis-je savoir si la nouvelle ligne est la ligne actuelle ?

3voto

Michael Todd Points 9384

Je me suis connecté à l'événement CellClick via le code suivant :

private void uiEntries_CellClick(object sender, DataGridViewCellEventArgs e)
{
    Console.WriteLine(e.RowIndex == uiEntries.NewRowIndex);
}

Lorsque cette condition est remplie, l'utilisateur "sélectionne" la nouvelle ligne. Sur la base de ces informations, il se peut que vous deviez insérer un nouvel enregistrement (à l'aide de la méthode ..Rows.Add()) avant de pouvoir en faire quoi que ce soit, car la nouvelle ligne n'existe pas réellement dans la collection ; elle n'est qu'un espace réservé pour représenter une nouvelle ligne.

0voto

P.K Points 4848

Cette valeur de propriété peut-elle résoudre votre problème ?

dataGridView1.CurrentCell.RowIndex

0voto

user1318499 Points 101

J'utilise l'événement CellEnter pour enregistrer CurrentCell.RowIndex dans une variable de formulaire. Le fait de cliquer sur un autre bouton entraîne le déclenchement de cet événement avec le dernier indice de ligne existant au lieu du nouvel indice de ligne dont nous avons besoin, de sorte que le test du focus ignore ce cas.

Cela évite de devoir vérifier toutes les actions possibles de la touche et de la souris qui pourraient déplacer le curseur vers la nouvelle ligne, comme vous le faites avec l'événement CellClick.

Code auto-converti de VB :

private int ActualCurrentRowIndex;

private void DataGridView1_CellEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
{
    if (DataGridView1.Focused) {
        ActualCurrentRowIndex = DataGridView1.CurrentCell.RowIndex;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X