Bonjour,
J'ai créé un Binding Navigator (BN) pour un Datagridiew (DG)
tout d'abord, je l'ai initialisé comme ceci :
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 :
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
- 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) :
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
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
La gestion par les boutons fonctionne parfaitement.
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
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 ?
Partager