2010-06-15 16 views
11

en mi aplicación C# 4.0, tengo un DataGridView para mostrar algunos datos. Quiero que el tamaño de las Columnas corresponda al contenido, por lo que configuro el AutoSizeColumnsMode en AllCellsExceptHeader. Pero quiero restringir las columnas para que crezcan más allá de cierto valor. Hay una propiedad MinimumWidth ... pero desafortunadamente no hay una propiedad MaximumWidth.DataGridView Autosize pero restringe el tamaño máximo de columna

¿Alguna idea de cómo solucionar esto?

Gracias de antemano, Frank

Respuesta

11

La única manera de que me las arreglé para hacer eso, es comprobar ancho de las columnas después de añadir filas a ella, verificar el ancho, y si su tamaño es superior a mi máximo, me puse manualmente después de cambiar las columnas AutoSizeMode a DataGridViewAutoSizeColumnMode.None

 foreach(DataGridViewColumn c in myView.Columns) 
      if (c.Width > myMax) 
      { 
       c.AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
       c.Width = myMax; 
      } 

Naturalmente, que había necesidad de establecer el AutoSizeColumnsMode a AllCellsExceptHeader de nuevo cuando se agrega/actualizar/eliminar filas y hacer el procedimiento de nuevo.

3

Sé que es un problema anterior, pero me enfrenté a mí mismo y obtuve una solución decente (supongo que es);

' Eventhandler 
Private Sub DataGridView1_ColumnWidthChanged(sender As Object, e As DataGridViewColumnEventArgs) 

// If my Grid refreshes this event doesnt work properly so I stop it from firing 
    If isRefreshing Then Exit Sub 

    Dim col As DataGridViewColumn = e.Column 
    If col.AutoSizeMode = DataGridViewAutoSizeColumnMode.None Then //optional 
     Dim isWidth As Integer = col.Width 
     Dim prefWidth As Integer = col.GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCellsExceptHeader, True) 
     If isWidth > prefWidth Then col.Width = prefWidth 
    End If 
End Sub 

En este caso mi MaxWidth es el ancho de preajuste. Puede cambiar prefWidth al máximo que desee.

+1

Acabo de notar que es una pregunta de C# con una respuesta de vb.net, perdón por eso. Pero deberías poder traducir eso. :-) – Luke

Cuestiones relacionadas