J'ai une application Windows avec DataGridView comme présentation de données. Toutes les 2 minutes, la grille sera rafraîchie avec de nouvelles données. Afin de garder la barre de défilement en phase avec les nouvelles données ajoutées, je dois réinitialiser ses ScrollBars:DataGridView: comment synchroniser la barre de défilement avec la sélection de cellule actuelle?
dbv.Rows.Clear(); // clear rows
SCrollBars sc = dbv.ScrollBars;
dbv.ScrollBars = ScrollBars.None;
// continue to populate rows such as dbv.Rows.Add(obj);
dbv.ScrollBars = sc; // restore the scroll bar setting back
Avec des codes ci-dessus, la barre de défilement réapparaît bien après actualisation des données. Le problème est que l'application nécessite de définir certaines cellules comme sélectionnées après l'actualisation:
dbv.CurrentCell = dbv[0, selectedRowIndex];
Avec le code ci-dessus, la cellule est sélectionnée; cependant, la position de la barre de défilement ne reflète pas la position de la ligne de la cellule sélectionnée. Lorsque j'essaie de déplacer la barre de défilement après la régénération, la grille passe à la première ligne.
Il semble que la position de la barre de défilement soit ramenée à 0 après la réinitialisation. Le code pour définir CurrentCell de la grille ne provoque pas le repositionnement de la barre de défilement à l'emplacement correct. Il n'y a aucune propriété ou méthode pour obtenir ou définir la valeur de barre de défilement dans DataGriadView, autant que je sache.
J'ai essayé aussi de définir la ligne sélectionnée vers le haut:
dbv.CurrentCell = dbv[0, selectedRowIndex];
dbv.FirstDisplayedScrollingRowIndex = selectedRowIndex;
La ligne sera réglé sur le haut, mais il est encore désynchronisés la position de la barre de défilement. Vous ne savez pas s'il est possible de synchroniser la position de la barre de défilement avec la ligne sélectionnée dans le code?