Come modificare la posizione della riga della modalità virtuale DataGridView?
-
05-07-2019 - |
Domanda
Come modificare la posizione della riga della modalità virtuale DataGridView?
Sto usando Windows Forms .
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