2012-03-12 14 views
7

Sto provando a scorrere verso il basso un datagrid WPF con il codice dietro. Io usowpf (C#) DataGrid ScrollIntoView - come scorrere fino alla prima riga che non viene visualizzata?

int itemNum=0; 
    private void Down_Click(object sender, RoutedEventArgs e) 
    { 
     if (itemNum + 1 > dataGridView.Items.Count - 1) return; 
     itemNum+=1; 
     dataGridView.UpdateLayout(); 
     dataGridView.ScrollIntoView(dataGridView.Items[itemNum]); 
    } 

Questo consente di scorrere solo se la riga itemNum non è mostrato.

Ad esempio, se il DataGrid è abbastanza lungo da contenere 10 righe e ho 20 righe, è necessario chiamare questa funzione 11 volte (fino a quando non è 11) per scorrere alla riga successiva.

Non scorre verso il basso se la riga è già inserita nella griglia (anche se è l'ultima sullo schermo).

Voglio raggiungere questo quando chiamo questo metodo, la griglia porterà la riga successiva nella parte superiore della griglia (come fa lo scroller). Perché non funziona?

risposta

18

Utilizzare DataGridView.FirstDisplayedScrollingRowIndex.

int itemNum=0; 
    private void Down_Click(object sender, RoutedEventArgs e) 
    { 
     itemNum++; 
     if (itemNum > dataGridView.Items.Count - 1) return; 
     //dataGridView.UpdateLayout(); <-- I don't think you need this 
     dataGridView.FirstDisplayedScrollingRowIndex = itemNum; 
    } 

Spiacente non si rese conto di griglia WPF non ha avuto questo. Il punto sullo scorrimento rimane valido fino a quel momento.

ScrollIntoView scorrerà solo se l'elemento non è in vista e lo farà l'ultima riga se è al di sotto delle linee visibili correnti, quindi quando si scorre per visualizzare l'undicesimo elemento sembra scorrere per il secondo .

Questo lavoro dovrebbe funzionare per voi. Scorri fino alla riga più in basso e quindi scorri fino a qualsiasi riga desideri. Nota, qui devi effettivamente aggiornare il layout o ignorerà i risultati del primo scorrimento prima di scorrere di nuovo verso l'alto.

 dataGridView.ScrollIntoView(DataGrid1.Items[DataGrid1.Items.Count - 1]); 
     dataGridView.UpdateLayout(); 
     dataGridView.ScrollIntoView(DataGrid1.Items[itemIndex]); 
+2

Mi dispiace ma questo è un DataGrid in WPF, un po 'maleducato ha eliminato la parte WPF del mio argomento, probabilmente solo per ottenere punti. Quello che hai suggerito funziona su WINDOWS FORM DataGridView – Programer

+1

Spiacente, ho aggiornato la risposta per WPF – Tsabo

+1

@Tsabo grazie .. ha funzionato per me..ho cercato questo –

2

Check this out, è per un ListBox, ma l'intuizione è grande e può anche lavorare per la griglia:

In poche parole: gli oggetti vengono caricati nel ListBox in modo asincrono, quindi se si chiama ScrollIntoView() all'interno dell'evento CollectionChanged (o simile) non avrà ancora elementi, quindi non lo scorrimento.

Spero che mi aiuti, sicuramente mi ha aiutato! ;-)

Problemi correlati