2011-07-11 22 views
9

Tengo un DataGridView con un número definible por el usuario de columnas (en cualquier lugar de ~ 6-60) de datos numéricos. En el extremo superior, la cantidad de datos en la cuadrícula excede la que se puede mostrar en la pantalla a la vez. Tengo un gráfico que va con los datos. Me gustaría mantener los dos sincronizados, de modo que un tiempo específico T en el gráfico esté alineado verticalmente con el mismo tiempo en la cuadrícula.Redimensionar de forma programada DataGridView para eliminar barras de desplazamiento

Para hacer esto, me gustaría hacer que el DGV sea lo suficientemente ancho para evitar una barra de desplazamiento horizontal, hacer que el gráfico sea igualmente ancho, y luego descargar el desplazamiento en un control de contenedor. Sin embargo, no puedo encontrar una manera de obtener directamente el ancho que necesitaría para configurar el DGV para quitar la barra de desplazamiento de él.

Respuesta

8

Para evitar que DataGridView muestre su barra de desplazamiento horizontal, deberá asegurarse de que el ancho de su DGV no sea inferior al ancho de sus columnas más el ancho del encabezado de la fila. También necesitará ajustar los dos píxeles que se agregan al ancho (y alto) del control cuando su propiedad BorderStyle no es None.

Aquí es un método que devolverá este valor mínimo para un determinado DataGridView:

/// <summary> 
/// Return the minimum width in pixels a DataGridView can be before the control's vertical scrollbar would be displayed. 
/// </summary> 
private int GetDgvMinWidth(DataGridView dgv) { 
    // Add two pixels for the border for BorderStyles other than None. 
    var controlBorderWidth = (dgv.BorderStyle == BorderStyle.None) ? 0 : 2; 

    // Return the width of all columns plus the row header, and adjusted for the DGV's BorderStyle. 
    return dgv.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) + dgv.RowHeadersWidth + controlBorderWidth; 
} 
+0

La barra de desplazamiento vertical no es un problema en mi caso, pero no podría hacerse esto con menos dolor que una subclase de la suma de la altura vertical de las filas y etc, y comprobar que en contra de la altura de control? –

+0

@ Dan, creo que he entendido mal tu pregunta. ¿Desea establecer la altura de su DGV para que nunca muestre una barra de desplazamiento vertical? –

+0

No del todo, quiero que se ajuste el ancho para que nunca se muestre una barra de desplazamiento horizontal. –

3

Esto cambiará el tamaño de las columnas para ajustarse al espacio que se les proporciona y se eliminará la barra de desplazamiento horizontal.

dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; 

Esto cambiará el tamaño de las columnas para convertirse en el ancho más pequeño posible y aún así mantener los valores en las celdas visibles y se cambiará automáticamente el tamaño del DataGridView para adaptarse a las columnas, pero la barra de desplazamiento horizontal puede aparecer si el formulario no es suficientemente grande. En ese caso, tendría que cambiar el tamaño del ancho del formulario.

dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 
+0

Eso también daría como resultado columnas con ancho variable, lo que no es aceptable ya que necesitan coincidir con el espaciado de la escala horizontal del gráfico. –

Cuestiones relacionadas