2011-09-14 19 views
9

Quiero hacer que un tamaño de dataGridView se ajuste al tamaño total de columnas y filas. Acerca de altura total, me las arreglé para ajustarlo a la altura de las columnas de esa manera:fit dataGridView size to row's and columns's total size

const int datagridLines = 30; 
s.Height = dataGridView2.Columns[0].HeaderCell.Size.Height; 
for (byte i = 0; i < datagridLines; i++) 
{ 
    dataGridView2.Rows.Add(); 
    s.Height += dataGridView2.Rows[i].Height; 
} 
dataGridView2.ClientSize = s; 

He intentado algunas cosas para encajar también el ancho, pero sin suerte. ¿Alguna sugerencia?

Gracias.

Respuesta

16

esto debería funcionar:

int height = 0; 
foreach (DataGridViewRow row in dataGridView1.Rows) { 
    height += row.Height; 
} 
height += dataGridView1.ColumnHeadersHeight; 

int width = 0; 
foreach (DataGridViewColumn col in dataGridView1.Columns) { 
    width += col.Width; 
} 
width += dataGridView1.RowHeadersWidth; 

dataGridView1.ClientSize = new Size(width + 2, height + 2); 

El + 2 a los valores width y height son un factor de elusión a la cuenta para el ancho de los elementos interiores de DataGridView. Recuerdo haber visto un código en alguna parte que te permitirá obtener este valor sin los números codificados pero no puedo encontrarlo ahora.

+0

Sí, eso fue, gracias Jay! – alexxx

+0

¿Podría ser que la propiedad de relleno contribuya a los valores de compensación de +2? Ver respuesta aceptada de http://stackoverflow.com/questions/7193268/how-to-decrese-the-size-of-button-to-a-small-size-inside-cell-of-datagrid-view-bu/ 7198229 # comment-8785853. – TheBlastOne

+0

@TheBlastOne - La propiedad de relleno establece el espacio entre el borde de la celda y su contenido. Creo que la propiedad DataGridViewColumn.DividerWidth tiene algo que ver con eso. –

0

Deberá usar las propiedades de la colección DataGridViewRow y de la colección DataGridViewColumn para hacerlo.

Prueba el enfoque similar al que se utiliza en este:

how to increase rows size in DataGridView

+0

Gracias por su respuesta también Mamta Dalal. – alexxx

8

GetRowsHeight y GetColumnsWidth métodos de filas y columnas colecciones deben darle lo que necesita en una forma fácil:

var totalHeight = dataGridView2.Rows.GetRowsHeight(DataGridViewElementStates.None); 
var totalWidth = dataGridView2.Columns.GetColumnsWidth(DataGridViewElementStates.None); 
+0

Esto no incluye la altura/ancho del encabezado. – AbleArcher

+1

puedes hacer el ancho total + = dataGridView1.RowHeadersWidth; – barlop

7

versión un poco más completa:

dataGridView.Height = dataGridView.Rows.GetRowsHeight(DataGridViewElementStates.None) + dataGridView.ColumnHeadersHeight + 2; 

dataGridView.Width = dataGridView.Columns.GetColumnsWidth(DataGridViewElementStates.None) + dataGridView.RowHeadersWidth + 2; 
+0

Todavía contiene código fijo 2. – AbleArcher

+1

que vale la pena mencionar, que combina lo mejor de ticcky y jay, pero debe explicar el '2'. – barlop

+0

no funciona en este caso, aunque tengo un método ineficiente que funciona http://stackoverflow.com/questions/37635932/calculate-padding-of-datagridview-when-padding-is-greater-than-two – barlop

0

Es un poco tarde y en Visual Basic, pero esto funcionó para mí en el caso alguien más encuentra este hilo. Estoy usando una vista de cuadrícula de datos acoplada en un tableLayoutPanel, que cambia el tamaño automáticamente cuando se cambia el tamaño del formulario. No reduce la forma. Solo empiezo la forma pequeña. Las filas se pueden agregar usando la misma técnica.

Private Sub setFormWidth() 
     Dim iTotalWidth As Integer = 0 '884 
     Dim iDisplayedWidth As Integer = 0 
     Dim r As Rectangle 
     For Each c As DataGridViewColumn In dgv_EmpList.Columns 
      If c.Visible Then 
       iTotalWidth += c.Width 
       r = dgv_EmpList.GetColumnDisplayRectangle(c.Index, True) 
       iDisplayedWidth += r.Width 
      End If 
     Next 
     Me.Width += (iTotalWidth - iDisplayedWidth) 
    End Sub 
+0

A La cotización en bloque es para cuando está citando otra fuente. Además, a menos que su formulario no tenga bordes, debe usar Me.ClientSize en su lugar, ya que eso excluiría los bordes (que tienen diferentes valores en diferentes versiones de Ventana). – LarsTech