2010-01-23 13 views
13

alt text http://www.freeimagehosting.net/uploads/260c1f6706.jpgeliminar el espacio vacío gris en la cuadrícula de datos en C#

¿Cómo se quita el espacio vacío es decir, quiero que la cuadrícula de datos para cambiar el tamaño automáticamente en función de la no. de filas Sé por columnas que podemos hacer eso utilizando el valor de relleno en AutoSizeColumnMode, pero no hay valor de relleno para AutoSizeRowsMode.

+1

+1 para resaltado retardado :) – TheBlastOne

+0

Destacado "con discapacidad cognitiva". –

Respuesta

9

Un poco de un truco, pero es posible que intente esto:

dataGridView1.BackgroundColor = System.Drawing.SystemColors.Control; 

Por cierto esto ha sido reported as a bug.

+0

Esto funciona, pero aún tienes el borde. ¿Alguna idea de cómo eliminar eso? –

11

Se puede hacer, tendría que ajustar el tamaño del cliente cuando se agrega o quita una fila. Sin embargo, no oculta completamente el fondo una vez que aparece la barra de desplazamiento vertical y la altura de la grilla no es divisible por la altura de la fila. Agregue una nueva clase a su proyecto y pegue el código que se muestra a continuación. Compilar. Coloque el nuevo control desde la parte superior de la caja de herramientas en su formulario.

using System; 
using System.Drawing; 
using System.Windows.Forms; 

class AutoSizeGrid : DataGridView { 
    private int gridHeight; 
    private bool resizing; 
    protected override void OnClientSizeChanged(EventArgs e) { 
    if (!resizing) gridHeight = this.ClientSize.Height; 
    base.OnClientSizeChanged(e); 
    } 
    protected override void OnRowsAdded(DataGridViewRowsAddedEventArgs e) { 
    setGridHeight(); 
    base.OnRowsAdded(e); 
    } 
    protected override void OnRowsRemoved(DataGridViewRowsRemovedEventArgs e) { 
    setGridHeight(); 
    base.OnRowsRemoved(e); 
    } 
    protected override void OnHandleCreated(EventArgs e) { 
    this.BeginInvoke(new MethodInvoker(setGridHeight)); 
    base.OnHandleCreated(e); 
    } 
    private void setGridHeight() { 
    if (this.DesignMode || this.RowCount > 99) return; 
    int height = this.ColumnHeadersHeight + 2; 
    if (this.HorizontalScrollBar.Visible) height += SystemInformation.HorizontalScrollBarHeight; 
    for (int row = 0; row < this.RowCount; ++row) { 
     height = Math.Min(gridHeight, height + this.Rows[row].Height); 
     if (height >= gridHeight) break; 
    } 
    resizing = true; 
    this.ClientSize = new Size(this.ClientSize.Width, height); 
    resizing = false; 
    if (height < gridHeight && this.RowCount > 0) this.FirstDisplayedScrollingRowIndex = 0; 
    } 
} 
+0

thx por su esfuerzo, pero me deshice de ese espacio mediante el método sugerido anteriormente. –

+0

Encontré algún problema en mis pruebas, mira: http://prnt.sc/b3rf7g ¿Puedo eliminar la pequeña fila gris también? Dependiendo de los datos, la esquina izquierda tiene una gran área de graw: http://prnt.sc/b3rft4 ¿Cómo puedo solucionar esto? – Jack

3

Establezca la propiedad MaxHeight de la cuadrícula de datos. por ejemplo, MaxHeight="150"

En mi caso, he eliminado el espacio que ha mostrado en la cuadrícula anterior con borde rojo.

Cuestiones relacionadas