2012-04-01 75 views
30

Tôi đang cố cuộn xuống dưới cùng của một DataGridView trong C# WinForm.Cuộn xuống cuối C# DataGridView

Mã này hoạt động với một TextBox:

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

... nhưng tôi không biết làm thế nào để làm điều đó với một DataGridView. Bất kỳ trợ giúp, xin vui lòng?

+0

thể trùng lặp của [DataGridView: Cuộn xuống tự động chỉ khi cuộn nằm ở phía dưới] (http://stackoverflow.com/questions/16263377/datagridview-scroll- down-automatic-only-if-the-scroll-is-at-the-bottom) –

Trả lời

61

Để cuộn xuống dưới cùng của DataGridView hãy thử điều này.

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

Hữu ích, cảm ơn. Nếu DataGridView của bạn có hàng ẩn thì bạn cần kiểm tra khả năng hiển thị hàng vì DataGridView không cho phép bạn cuộn đến các hàng ẩn. –

+1

Tốt nhất! Nếu DataGridView của bạn được ràng buộc với một BindingSource, bạn có thể đạt được kết quả tương tự với dataGridView1.FirstDisplayedScrollingRowIndex = BindingSource.Count-1; – WhySoSerious

+1

Điều này không hoạt động nếu có một ô hiện đang được chọn vì DataGridView cố gắng giữ cho ô đó hiển thị. Có cách nào để buộc cuộn không? Tôi không muốn thay đổi ô hiện tại, chỉ để cho nó di chuyển ra khỏi màn hình. – dwilliss

3

Là một lập trình viên thương mại, tôi sử dụng một C# DLL để xử lý tất cả các dự án DataGridView tôi mang đến cho tôi sự tự do ngôn ngữ cho bất cứ dự án tôi thực hiện. Tất cả các chương trình của tôi đều bẫy tất cả các phím bấm để tôi có thể sử dụng chúng cho mục đích riêng của mình. Đối với DataGridView di chuyển, tôi sử dụng các phím PageUp/PageDown cho một trang duy nhất, Ctrl/Page cho một dòng và Alt/Page cho đầu (Lên) và dưới cùng (Xuống). C# mã và tự gọi điện thoại cơ bản như sau:

//---------- 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 
Các vấn đề liên quan