2012-04-01 31 views
30

Próbuję przewinąć do dołu DataGridView w WinForm C#.Przewiń do dołu C# DataGridView

Ten kod działa z TextBox:

textbox_txt.SelectionStart = textbox_txt.Text.Length; 
textbox_txt.ScrollToCaret(); 

... ale nie wiem jak to zrobić z DataGridView. Proszę o pomoc?

+0

możliwe duplikat [DataGridView: Przewiń w dół automatycznie tylko wtedy, gdy zwój jest na dole] (http://stackoverflow.com/questions/16263377/datagridview-scroll- down-automatic-only-if-the-scroll-is-at-the-bottom) –

Odpowiedz

61

Aby przewinąć do dołu DataGridView spróbuj tego.

dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.RowCount-1; 
+2

Przydatne, dziękuję. Jeśli DataGridView ma ukryte wiersze, należy sprawdzić widoczność wiersza, ponieważ DataGridView nie pozwala przewinąć do niewidocznych wierszy. –

+1

Dobra! Jeśli twój DataGridView jest powiązany z BindingSource, możesz osiągnąć ten sam wynik z dataGridView1.FirstDisplayedScrollingRowIndex = BindingSource.Count-1; – WhySoSerious

+1

To nie działa, jeśli aktualnie wybrana jest komórka, ponieważ DataGridView próbuje zachować tę komórkę jako widoczną. Czy istnieje jakikolwiek sposób na zrzucenie zwoju? Nie chcę zmieniać bieżącej komórki, po prostu pozwól jej przewinąć ekran. – dwilliss

3

Jako programista komercyjny, używam biblioteki DLL C# do obsługi wszystkich moich projektów DataGridView, co daje mi swobodę językową dla każdego projektu, który podejmuję. Wszystkie moje programy przechwytują wszystkie naciśnięcia klawiszy, dzięki czemu mogę ich używać do własnych celów. Przy przewijaniu DataGridView używam klawiszy PageUp/PageDown dla jednej strony, Ctrl/Page dla pojedynczej linii i Alt/strony dla góry (góra) i dołu (dół). Kod C# i podstawowa sekwencja powołanie się następująco:

//---------- C# Dll Partial Source ----------- 

public int RowShow 
    { get { return vu.DisplayedRowCount(false); } } 

public int RowCount 
    { get { return vu.RowCount; } } 

public void PageMove(int rows) 
{ 
    int rowlimit = vu.RowCount - 1; 
    int calc = vu.FirstDisplayedScrollingRowIndex + rows; 

    if (calc > rowlimit) calc = rowlimit; // Go to bottom 
    if (calc < 0)  calc = 0;   // Go to top 

    vu.FirstDisplayedScrollingRowIndex = calc; 
} 

// ---------- End Data Grid View ---------- 



//---------- Calling Program C# ---------- 

public void Page_Key(int val, int lastKey) 
{ 
    int inc = 1;    // vu is DataGridView 

    If (val == 33) inc = -1; 

    int rowsDisp = vu.RowShow; // # of rows displayed 
    int rowsMax = vu.RowCount; // # of rows in view 
    int rows  = 0; 

    switch (lastKey) 
    {   
     case 17:     // Ctrl prior to Page 
     rows = inc; 
     break; 
     case 19:     // Alt prior to Page 
     rows = rowsMax * inc; 
     break; 
     default: 
     rows = rowsDisp * inc 
     break; 
    } // end switch 

    vu.PageMove(rows) 
} // end Page_Key 



'----- Calling Program B4PPC, VB ----- 

Sub Page_Key(val,lastKey)  ' 33=PageUp, 34=Down 
    inc = 1     ' vu is DataGridView 

    If val = 33 then inc = -1 

    rowsDisp = vu.RowShow  ' # of rows displayed 
    rowsMax = vu.RowCount ' # of rows in view 
    rows  = 0 

    Select lastKey 
     Case 17     ' Ctrl prior to Page 
     rows = inc 
     Case 19     ' Alt prior to Page 
     rows = rowsMax * inc 
     Case Else 
     rows = rowsDisp * inc 
    End Select 

    lastKey = "" 

    vu.PageMove(rows) 
End Sub 
Powiązane problemy