usar - minimizar aplicacion en barra de tareas c#
¿Cómo puedo establecer la posición de mi barra de desplazamiento de la cuadrícula de datos en mi aplicación de winforms? (5)
Sí, definitivamente FirstDisplayedScrollingRowIndex . Tendrá que capturar este valor después de alguna interacción del usuario, y luego de que la cuadrícula vuelva a cargar, querrá volver a establecer el valor anterior.
Por ejemplo, si la recarga se desencadena con un clic en un botón, en el botón clic en el controlador, es posible que desee tener como primera línea un comando que coloca este valor en una variable:
// Get current user scroll position
int scrollPosition = myGridView.FirstDisplayedScrollingRowIndex;
// Do some work
...
// Rebind the grid and reset scrolling
myGridView.DataBind;
myGridView.FirstDisplayedScrollingRowIndex = scrollPosition;
En mi aplicación C # winforms, tengo una cuadrícula de datos. Cuando se recargue la cuadrícula de datos, quiero establecer la barra de desplazamiento nuevamente donde el usuario la configuró. ¿Cómo puedo hacer esto?
EDITAR: estoy usando el control DataGrid viejo winforms, no el DataGridView más nuevo
Guarde sus valores de desplazamiento vertical y horizontal en alguna variable y reinícielos.
int v= dataGridView1.VerticalScrollingOffset ;
int h= dataGridView1.HorizontalScrollingOffset ;
//...reload
dataGridView1.VerticalScrollingOffset = v;
dataGridView1.HorizontalScrollingOffset =h;
En realidad, no interactúa directamente con la barra de desplazamiento, sino que establece FirstDisplayedScrollingRowIndex
. Entonces, antes de volver a cargar, capture ese índice, una vez que se haya recargado, reinícielo a ese índice.
EDITAR: Buen punto en el comentario. Si está utilizando un DataGridView
entonces esto funcionará. Si está utilizando el antiguo DataGrid
, la forma más fácil de hacerlo es heredarlo. Ver aquí: Enlace
DataGrid tiene un método GridVScrolled protegido que se puede usar para desplazar la cuadrícula a una fila específica. Para usarlo, obtenga una nueva grilla de DataGrid y agregue un método ScrollToRow.
C # code
public void ScrollToRow(int theRow)
{
//
// Expose the protected GridVScrolled method allowing you
// to programmatically scroll the grid to a particular row.
//
if (DataSource != null)
{
GridVScrolled(this, new ScrollEventArgs(ScrollEventType.LargeIncrement, theRow));
}
}
Usé la respuesta de @BFree, pero también necesitaba capturar la primera fila visible en DataGrid
:
int indexOfTopMostRow = HitTest(dataGrid.RowHeaderWidth + 10,
dataGrid.PreferredRowHeight + 10).Row;
Acabo de publicar la respuesta en el enlace dado por BFree
DataGrid tiene un método GridVScrolled protegido que se puede usar para desplazar la cuadrícula a una fila específica. Para usarlo, obtenga una nueva grilla de DataGrid y agregue un método ScrollToRow
.
C # code
public void ScrollToRow(int theRow)
{
//
// Expose the protected GridVScrolled method allowing you
// to programmatically scroll the grid to a particular row.
//
if (DataSource != null)
{
GridVScrolled(this, new ScrollEventArgs(ScrollEventType.LargeIncrement, theRow));
}
}
Código VB.NET
Public Sub ScrollToRow(ByVal theRow As Integer)
''
'' Expose the protected GridVScrolled method allowing you
'' to programmatically scroll the grid to a particular row.
''
On Error Resume Next
If Not DataSource Is Nothing Then
GridVScrolled(Me, New ScrollEventArgs(ScrollEventType.LargeIncrement, theRow))
End If
End Sub