Bonjour,

J'ai créé un Binding Navigator (BN) pour un Datagridiew (DG)

tout d'abord, je l'ai initialisé comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 'création binding entre DG et BN
' DGBindingSource a été créé dans le designer
        DGBindingSource.DataSource = DG.DataSource
        Me.BN.BindingSource = DGBindingSource
        CurMa_DG = CType(Me.BindingContext(Me.dtv_DG), CurrencyManager)
' dtv_DG est un dataview du contenu de DG créé dans le designer
Pour naviguer d'une ligne à l'autre en utilisant le BN, je donne la possibilité à l'utilisateur d'utiliser l'un des 3 méthodes suivantes :
- les boutons de BN
- les flèches du clavier
- la souris.

Pour les boutons du BN, cela donne ceci (par exemple pour aller à la ligne suivante) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
   Private Sub BN_MoveNextItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BN_MoveNextItem.Click
        If CurMa_DG.Position < CurMa_DG.Count - 1 Then
            CurMa_DG.Position += 1
            DG.Rows(CurMa_DG.Position).Selected = True
            Me.DG.CurrentCell = DG.Rows(CurMa_DG.Position).Cells(1) 'utile pour mettre à jour l'identité du CurrentRow
' la ligne suivante me permet de gérer le scroll du DG à bon escient sachant que mon cadre n'affiche que 10 lignes.
            Me.DG.FirstDisplayedScrollingRowIndex = Math.Min(Math.Max(Me.DG.FirstDisplayedScrollingRowIndex,CurMa_DG.Position - 9), CurMa_DG.Position)
        End If
    End Sub
Pour le flèches du clavier, cela donne ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Private Sub DG_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DG.KeyUp
            'séléctionne toute la ligne active
            Me.DG.CurrentRow.Selected = True
            Me.DG.CurrentCell = Me.DG.CurrentRow.Cells(1)
            CurMa_DG.Position = DG.CurrentRow.Index
            BN_PositionItem.Text = CurMa_DG.Position + 1
 
End Sub
La gestion par les boutons fonctionne parfaitement.
En revanche, la gestion par la souris ou par le clavier fonctionne correctement pour la sélection des lignes et pour la mise à jour du TextBox BN_PositionItem, mais les boutons suivant restent grisés :
- MoveFirst et MovePrevious si je suis sur la première ligne et que je sélectionne une ligne suivante
- MoveLast et MoveNext si je suis sur la dernière ligne et que je sélectionne une ligne précédente.

J'ai dû rater un truc, mais je ne vois pas trop quoi d'autant que j'ai mis des espions sur
- CurMa_DG.Position
- DG_CaveListeContenu.CurrentRow.Index

ce qui m'a permis de vérifier la cohérence de ces valeurs par rapport à l'affichage.

Pourquoi donc :
- MoveFirst et MovePrevious restent grisés alors que CurMa_DG.Position>1
- MoveLast et MoveNext restent grisés alors que CurMa_DG.Position<CurMa_DG.Count-1 ?

Quelqu'un voit-il une explication ?