Domanda

Come modificare la posizione della riga della modalità virtuale DataGridView?

Sto usando Windows Forms .

È stato utile?

Soluzione

La risposta di Marcus è corretta, ma potrebbe anche essere necessario impostare la proprietà della cella corrente di DataGridView ...

dgv.CurrentCell = dgv.Rows[0].Cells[0];

Credo che questo farà scorrere la griglia. Inoltre, per essere assolutamente sicuro, potresti voler aggiungere questo prima dell'altra riga di codice ...

dgv.CurrentCell = null;

Ciò garantirà che se la riga desiderata è già la riga attiva ma appena sfuggita alla vista, la farà scorrere nuovamente in vista.

Altri suggerimenti

Devi cancellare la vecchia posizione e impostarne una nuova

La raccolta dataGridView1.SelectedRows ha le righe attualmente selezionate. A seconda della proprietà MultiSelect della griglia, potrebbe essere necessario scorrere tutte le righe nelle SelectedRows e contrassegnarle come non selezionate. Se sei in modalità di selezione singola, basta impostare la nuova riga come selezionata per cancellare la vecchia selezione.

Per selezionare una riga particolare (in questo caso quella sull'indice 0) basta aggiungere la riga    dataGridView1.Rows [0] .Selected = true;

Sembra che non sia necessario solo impostare la riga selezionata, ma anche la riga visualizzata. Puoi accedere a quest'ultimo con la proprietà FirstDisplayedScrollingRowIndex su DataGridView. Una delle configurazioni utili:

int lastShown = FirstDisplayedScrollingRowIndex + DisplayedRowCount(false) - 2;

if (lastShown < yourIndex)
  FirstDisplayedScrollingRowIndex += yourIndex - lastShown;
else if (FirstDisplayedScrollingRowIndex > yourIndex)
  FirstDisplayedScrollingRowIndex = yourIndex;

farà in modo che la riga appena selezionata non scompaia dallo schermo quando si scorre su / giù programmaticamente.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top