Positionnement dans un DataGrid
J'ai un problème avec un DataGrid (MSDATGRD.OCX) assez bizarre. Je veux pouvoir me déplacer soit par survol de la souris, soit avec les flèches adéquates.
Si je me déplace uniquement avec les flèches, aucun problème.
Si je me déplace uniquement par survol de la souris, aucun problème non plus.
Par contre si je me déplace par survol, puis décide d'utiliser les flèches, plus rien ne se passe. En fait il passe à l'enregistrement suivant, mais rien ne se passe à l'écran et si j'appuie une 2ème fois sur même flèche, il agit comme s'il était sur l'enregistrement initial (ce qu'il est d'ailleurs). En clair, à l'écran il reste sur le 1er enregistrement, mais au debug.print on voit qu'il affiche le contenu du suivant mais reste sur le 1er !
PS: Après visualisation, je m'aperçois que la tabulation de mon code a sauté au copier-coller. Existe t-il un moyen d'insérer du code en gardant celle-ci ?
Voici mon code:
Code Visual Basic :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| Private Sub DGGrid_KeyDown(KeyCode As Integer, Shift As Integer)
Debug.Print "AVANT DGGrid_KeyDown: " & DataSource.Fields(DataField).Value & " - " & DGGrid.Bookmark
Select Case KeyCode
Case vbKeyHome
DGGrid.Bookmark = DGGrid.RowBookmark(0)
Case vbKeyEnd
DGGrid.Bookmark = DGGrid.RowBookmark(MyRecordset.Recordcountt - 1)
Case vbKeyDown
DGGrid.Bookmark = DGGrid.RowBookmark(DGGrid.Row + 1)
Case vbKeyUp
DGGrid.Bookmark = DGGrid.RowBookmark(DGGrid.Row - 1)
Case vbKeyPageDown
DGGrid.Bookmark = DGGrid.RowBookmark(DGGrid.VisibleRows)
Case vbKeyPageUp
DGGrid.Bookmark = DGGrid.RowBookmark(-DGGrid.VisibleRows)
End Select
Debug.Print "APRES DGGrid_KeyDown: " & DataSource.Fields(DataField).Value & " - " & DGGrid.Bookmark
End Sub
Private Sub DGGrid_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Debug.Print "AVANT DGGrid_RowColChange: " & Myrecordset.Fields(DataField).Value & " - " & DGGrid.Bookmark
If DGGrid.RowContaining(Y) >= 0 Then DGGrid.Bookmark = DGGrid.RowBookmark(DGGrid.RowContaining(Y))
Debug.Print "APRES DGGrid_RowColChange: " & Myrecordset.Fields(DataField).Value & " - " & DGGrid.Bookmark
End Sub
Private sub Form_Load
Set DGGrid.DataSource = MyRecordset
DGGrid.DataField = MyField
DGGrid.MarqueeStyle = dbgHighlightRow + dbgHighlightCell
End Sub
Private Sub DGGrid_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Call SQL_RemoveAllBookmarks(DGGrid.SelBookmarks)
DGGrid.SelBookmarks.Add MyRecordset.Bookmark
End Sub
Public Function SQL_RemoveAllBookmarks(Bookmarks As SelBookmarks)
Dim X As Integer
For X = 0 To Bookmarks.Count - 1
Bookmarks.Remove (0)
Next
End Function |
MyRecordset est un Recordset limité à 100 enregistrements pour les essais. Le Datagrid ne contient qu'un seul champ texte tout simple. Pour l'instant je n'ai testé QUE la clé vbKeyDown, j'ai donc commenté les autres que je verrais après.
J'ai essayé dans un projet vierge avec uniquement ce code et j'ai la même chose. j'ai aussi essayé en supprimant la fonction DGGrid_RowColChange() et à part la non visualisation de la ligne courante, même topo. Si quelqu'un voit ce que se passe.
Merci d'avance
Calade