Comment changer la position de la ligne du mode virtuel DataGridView?
-
05-07-2019 - |
Question
Comment changer la position de la ligne du mode virtuel DataGridView?
J'utilise Windows Forms .
La solution
La réponse de Marcus est correcte, mais vous devrez peut-être également définir la propriété de cellule actuelle de DataGridView ...
dgv.CurrentCell = dgv.Rows[0].Cells[0];
Je crois que cela fera défiler la grille. De plus, pour plus de sécurité, vous pouvez ajouter ceci avant l'autre ligne de code ...
dgv.CurrentCell = null;
Cela garantira que si la ligne souhaitée est déjà la ligne active mais est simplement défilée hors de la vue, elle la retrouvera.
Autres conseils
Vous devez effacer l'ancienne position et en définir une nouvelle
La collection dataGridView1.SelectedRows contient les lignes actuellement sélectionnées. En fonction de la propriété MultiSelect de la grille, vous devrez peut-être parcourir toutes les lignes de SelectedRows et les marquer comme non sélectionnées. Si vous êtes en mode de sélection unique, il suffit de définir la nouvelle ligne comme sélectionnée pour effacer l'ancienne sélection.
Pour sélectionner une ligne particulière (dans ce cas, celle de l’index 0), il suffit d’ajouter la ligne dataGridView1.Rows [0] .Selected = true;
Il semble que vous ayez besoin non seulement de définir la ligne sélectionnée, mais également celle affichée. Vous pouvez accéder à ce dernier avec la propriété FirstDisplayedScrollingRowIndex
sur votre DataGridView. Une des configurations utiles:
int lastShown = FirstDisplayedScrollingRowIndex + DisplayedRowCount(false) - 2;
if (lastShown < yourIndex)
FirstDisplayedScrollingRowIndex += yourIndex - lastShown;
else if (FirstDisplayedScrollingRowIndex > yourIndex)
FirstDisplayedScrollingRowIndex = yourIndex;
veillera à ce que la nouvelle ligne sélectionnée ne disparaisse pas de l'écran lors du défilement par programmation haut / bas.
Else
If i = rowcount Then
Me.GridSaleItem.CurrentCell = Me.GridSaleItem.Rows(i - 1).Cells(0)
Me.GridSaleItem.Rows(i - 1).Selected = True
End If
End If
Next
Private Sub GridSaleItem_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridSaleItem.SelectionChanged
Dim rowcount As Integer
rowcount = GridSaleItem.Rows.Count
For i As Integer = 1 To rowcount
If i = 1 Then
'
Else
If i = rowcount Then
Me.GridSaleItem.CurrentCell = Me.GridSaleItem.Rows(i - 1).Cells(0)
Me.GridSaleItem.Rows(i - 1).Selected = True
End If
End If
Next
End Sub