Question

Comment changer la position de la ligne du mode virtuel DataGridView?

J'utilise Windows Forms .

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top