2012-04-01 9 views
30

Estoy intentando desplazarme hacia la parte inferior de un DataGridView en un C# WinForm.Desplácese hasta la parte inferior de C# DataGridView

Este código trabaja con un cuadro de texto:

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

... pero no saben cómo hacerlo con un DataGridView. Cualquier ayuda, por favor?

+0

posible duplicado de [DataGridView: Desplácese hacia abajo automáticamente sólo si el desplazamiento es en la parte inferior] (http://stackoverflow.com/questions/16263377/datagridview-scroll- down-automatically-only-if-the-scroll-is-at-the-bottom) –

Respuesta

61

Para desplazarse hasta la parte inferior de DataGridView intente esto.

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

Útil, gracias. Si su DataGridView tiene filas ocultas, debe verificar la visibilidad de las filas porque DataGridView no le permite desplazarse a filas invisibles. –

+1

¡Bueno! Si su DataGridView está vinculado a un BindingSource, puede lograr el mismo resultado con dataGridView1.FirstDisplayedScrollingRowIndex = BindingSource.Count-1; – WhySoSerious

+1

Esto no funciona si hay una celda seleccionada actualmente porque DataGridView intenta mantener esa celda visible. ¿Hay alguna manera de forzar el rollo de todos modos? No quiero cambiar la celda actual, solo dejar que se desplace fuera de la pantalla. – dwilliss

3

Como programador comercial, que utilizan un DLL de C# para manejar todos mis proyectos DataGridView que me da la libertad idioma para cualquier proyecto que emprendo. Todos mis programas atrapan todas las pulsaciones de teclas para que pueda usarlas para mis propios fines. Para el desplazamiento de DataGridView, uso las teclas AvPág/AvPág para una sola página, Ctrl/Página para una línea y Alt/Página para arriba (Arriba) e inferior (Abajo). código C# y secuencia de llamada básica de la siguiente manera:

//---------- 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 
Cuestiones relacionadas