2013-04-28 14 views
5

Ho un programma che utilizza dataGridView per mostrare i dati che si aggiornano automaticamente ogni secondo aggiungendo le righe a dataGridView.DataGridView: scorri verso il basso automaticamente solo se lo scroll è in fondo

Quando voglio leggere qualcosa all'inizio, faccio scorrere verso l'alto, e anche quando i dati si aggiornano, la barra di scorrimento non va giù, è buona. Ma voglio che la barra di scorrimento si abbassi solo quando si trova nella parte inferiore di dataGridView.

Il comportamento che voglio quando viene aggiunta una nuova riga al testo:

se la barra di scorrimento si trova in fondo, scorrere verso il basso automaticamente. se la barra di scorrimento è altrove, non scorrere.

Il codice che ho scritto per questo e, purtroppo, non funziona è:

private void liveDataTable_Scroll(object sender, ScrollEventArgs e) 
{ 
    ScrollPosition = liveDataTable.FirstDisplayedScrollingRowIndex; 

    if (ScrollPosition == liveDataTable.RowCount - 1) 
    { 
     IsScrolledToBottom = true; 
    } 
    else 
    { 
     IsScrolledToBottom = false; 
    }    
} 
public void AddRowToDataGridMethod() 
{ 
    dataTable.Rows.Add(); 

    if (dataWin.IsScrolledToBottom == true) 
     dataWin.LiveDataTable.FirstDisplayedScrollingRowIndex = (dataWin.ScrollPosition + 1); 
    else 
     dataWin.LiveDataTable.FirstDisplayedScrollingRowIndex = dataWin.ScrollPosition;   
} 
+1

Date un'occhiata a questa domanda: http://stackoverflow.com/questions/378330/how-can-i-set-the-position-of-my-datagrid-scrollbar-in- my-winforms-app Dovrebbe risolvere il tuo problema. – jAC

+0

possibile duplicato di [Scorrere fino alla fine di C# DataGridView] (http://stackoverflow.com/questions/9969061/scroll-to-bottom-of-c-sharp-datagridview) –

risposta

12

Si può provare questo:

int firstDisplayed = liveDataTable.FirstDisplayedScrollingRowIndex; 
int displayed = liveDataTable.DisplayedRowCount(true); 
int lastVisible = (firstDisplayed + displayed) - 1; 
int lastIndex = liveDataTable.RowCount - 1; 

liveDataTable.Rows.Add(); //Add your row 

if(lastVisible == lastIndex) 
{ 
    liveDataTable.FirstDisplayedScrollingRowIndex = firstDisplayed + 1; 
} 

Quindi, in pratica verificare se l'ultima riga è visibile e se è scorrere 1 riga dopo aver aggiunto la nuova riga.

+0

Grazie mille m8! – olegoro

1

Volevo solo aggiungere, un altro metodo per tenerlo scorrimento (ma con la nuova riga in basso) è ...

Fondamentalmente ciò che fa è dire di avere 10 righe visualizzate e il vostro stanno elaborando ogni riga . Quando arriva alla 11a riga, scorre di 1 riga in modo che la riga in ora sia visualizzata ma in basso. Ad esempio potresti aggiungere 1 e ora rimarrà la tua riga + 1 in modo che si trovi accanto all'ultima riga dal basso.

if (myRow.Displayed == false) 
{ 
    int intDisplayRows = myRow.Index - dataView_Database.DisplayedRowCount(false); 
    dataView_Database.FirstDisplayedScrollingRowIndex = intDisplayRows; 
} 
1
private void dgZavod_RowsAdded_1(object sender, DataGridViewRowsAddedEventArgs e) { 
    dgZavod.FirstDisplayedScrollingRowIndex = dgZavod.Rows[dgZavod.Rows.Count - 1].Index; 
} 
Problemi correlati