2013-04-28 14 views
5

Mam program, który używa dataGridView do wyświetlania danych, które aktualizują się automatycznie co sekundę, dodając wiersze do dataGridView.DataGridView: Przewiń w dół automatycznie tylko, jeśli przewijanie znajduje się na dole

Kiedy chcę przeczytać coś na początek, przewijam w górę, a nawet gdy aktualizacje danych, pasek przewijania nie znika, jest dobry. Ale chcę, aby pasek przewijania zejść tylko wtedy, gdy jest na dole danych GridView.

Zachowanie chcę, kiedy nowy rząd zostanie dodany do tekstu:

jeśli pasek przewijania jest u dołu, przewijać automatycznie. , jeśli pasek przewijania jest w innym miejscu, nie przewijaj.

Kod Pisałem o tym i niestety nie działa to:

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

Spójrz na to pytanie: http://stackoverflow.com/questions/378330/how-can-i-set-the-position-of-my-datagrid-scrollbar-in- my-winforms-app To powinno rozwiązać twój problem. – jAC

+0

możliwy duplikat [Przewiń do dołu C# DataGridView] (http://stackoverflow.com/questions/9969061/scroll-to-bottom-of-c-sharp-datagridview) –

Odpowiedz

12

Można spróbować to:

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; 
} 

Więc w zasadzie sprawdzić, czy ostatni wiersz jest widoczny, a jeśli to jest przewijane o 1 rząd w dół po dodaniu nowego wiersza.

+0

Dziękuję bardzo M8! – olegoro

1

Chciałem tylko dodać, inna metoda aby go przewijania (ale z nowym wierszu na dole) jest ...

Zasadniczo co to robi to, że masz 10 wierszy i wyświetlane są listy przetwarzania każdy wiersz . Kiedy dotrze do 11 rzędu, przewija się o 1 wiersz, więc twój rząd jest teraz wyświetlany, ale na dole. Możesz na przykład dodać 1, a teraz pozostanie twoim rzędem + 1, tak aby znajdował się obok ostatniego wiersza od dołu.

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; 
}