Events d'un Binding Navigator
Bonjour,
J'ai créé un Binding Navigator (BN) pour un Datagridiew (DG)
tout d'abord, je l'ai initialisé comme ceci :
Code:
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:
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:
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 ?