2012-04-01 4 views
30

Я пытаюсь прокрутить в нижней части DataGridView в C# WinForm.Прокрутите вниз до C# DataGridView

Этот код работает с TextBox:

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

... но я не знаю, как сделать это с DataGridView. Любая помощь, пожалуйста?

+0

возможно дубликат [DataGridView: Прокрутка вниз автоматически, только если прокрутка находится в нижней части] (http://stackoverflow.com/questions/16263377/datagridview-scroll- down-автоматически-only-if-the-scroll-is-at-the-bottom) –

ответ

61

Чтобы прокрутить страницу DataGridView, попробуйте это.

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

Полезно, спасибо. Если у вашего DataGridView есть скрытые строки, вам необходимо проверить видимость строк, потому что DataGridView не позволяет вам прокручивать невидимые строки. –

+1

Хороший! Если ваш DataGridView привязан к BindingSource, вы можете добиться того же результата с помощью dataGridView1.FirstDisplayedScrollingRowIndex = BindingSource.Count-1; – WhySoSerious

+1

Это не работает, если есть выбранная ячейка, потому что DataGridView пытается сохранить эту ячейку видимой. Есть ли способ заставить свиток в любом случае? Я не хочу менять текущую ячейку, просто позволяю ей прокручивать экран. – dwilliss

3

Как коммерческий программист, я использую C# DLL, чтобы обрабатывать все мои DataGridView проектов, которые дают мне свободу языка для любого проекта, который я берусь. Все мои программы захватывают все нажатия клавиш, чтобы я мог использовать их в своих целях. Для прокрутки DataGridView я использую клавиши PageUp/PageDown для одной страницы, Ctrl/Page для одной строки и Alt/Page для верхней (вверх) и нижней (вниз). C# код и основная последовательность вызова следующим образом:

//---------- 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 
Смежные вопросы