2010-01-28 182 views
29

Tengo una aplicación WinForms con control DataGridView. Mi control tiene cinco columnas (digamos "Nombre", "Dirección", "Teléfono", etc.)DataGridView: cómo establecer el ancho de columna?

No estoy contento con el ancho de columna predeterminado. Quiero tener más control sobre la apariencia de la columna. Lo que quiero es ser capaz de hacer una de las siguientes: Ancho de

  • Conjunto de cada columna en porcentaje
  • ancho
  • Conjunto de cada columna de píxeles
  • uso de algún otro método mejor practive (hacer ancho para ajustar el texto, etc.)

Sugerir - qué propiedad usar y cómo.

Respuesta

41

Puede utilizar la propiedad DataGridViewColumn.Width hacerlo:

DataGridViewColumn column = dataGridView.Columns[0]; 
column.Width = 60; 

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.width.aspx

+2

Gracias! Me di cuenta de por qué no funcionaba para mí. MSDN dice Si el valor especificado al establecer esta propiedad es menor que el valor de la propiedad MinimumWidth, en su lugar se usa el valor de la propiedad MinimumWidth. –

+1

Sí, el ancho no está disponible directamente para el control de cuadrícula, por lo que utiliza ItemStyle.With para establecer su propiedad. – Bhaskar

6

En cuanto a su última bala

ancho de maquillaje ajustar el texto

Usted puede experimentar con el .AutoSizeMode de su DataGridViewColumn, estableciéndolo en uno de estos valores:

None 
AllCells 
AllCellsExceptHeader 
DisplayedCells 
DisplayedCellsExceptHeader 
ColumnHeader 
Fill 

Más información en la página MSDN

21

Lo siguiente también puede ser tratado:

DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells 

o usar las otras opciones de ajuste en el DataGridViewAutoSizeColumnsMode Enum

+2

Esta es la mejor respuesta.Entonces podría cambiar el tamaño del formulario para que se ajuste al ancho de DataGridView. Gracias Mark! Esto me ahorró mucha molestia. – Glimpse

+1

Muy bueno ... y puede usar esta respuesta para Filas ... –

+2

Al usar la opción "Rellenar", las columnas se extienden para ocupar todo el ancho de la grilla. –

2
public static void ArrangeGrid(DataGridView Grid) 
{ 
    int twidth=0; 
    if (Grid.Rows.Count > 0) 
    { 
     twidth = (Grid.Width * Grid.Columns.Count)/100; 
     for (int i = 0; i < Grid.Columns.Count; i++) 
      { 
      Grid.Columns[i].Width = twidth; 
      } 

    } 
} 
2

uso:

yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); 
3

i sugieren para dar un ancho de todas las columnas de la cuadrícula como este:

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn(); 
col.HeaderText = "phone"    
col.Width = 120; 
col.DataPropertyName = (if you use a datasource) 
thegrid.Columns.Add(col);  

y para el principal (o el más largo) columna (digamos dirección) hacer esto:

col = new DataGridViewTextBoxColumn(); 
col.HeaderText = "address"; 
col.Width = 120; 

parte difícil

col.MinimumWidth = 120; 
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 

parte difícil

col.DataPropertyName = (same as above) 
thegrid.Columns.Add(col); 

De esta manera, si se estira la forma (y la red es "muelle lleno" en su contenedor) la columna principal, en este caso la columna de la dirección, toma todo el espacio disponible, pero nunca va menos de col.MinimumWidth, por lo que es el único que se redimensiona.

Lo uso, cuando tengo una cuadrícula y su última columna se usa para mostrar una imagen (como el icono de detalle o icono eliminar ...) y no tiene el encabezado y tiene que ser siempre el más pequeño .

15

La mayoría de las soluciones anteriores asumen que el padre DateGridView tiene .AutoSizeMode que no es igual a Fill. Si configura .AutoSizeMode para que la cuadrícula sea Fill, debe configurar AutoSizeMode para cada columna para que sea None si desea corregir un ancho de columna determinado (y deje que las otras columnas se llenen). Encontré una extraña excepción MS con respecto a un objeto nulo si cambia el ancho de una columna y el .AutoSizeMode primero no es None.

Esto funciona

chart.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
... add some columns here 
chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
chart.Column[i].Width = 60; 

Esto produce una excepción nula con respecto a un objeto interno en materia de montaje grosor del borde.

chart.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
... add some columns here 
// chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
chart.Column[i].Width = 60; 
+0

Esto me ayudó a depurar hasta horas ... !! – coding

+0

gran sugerencia, aunque realmente extraño ...: ~ – Bastiaan

1

que no quieres hacerlo mediante programación, puede manipular a la propiedad Ancho de columna, que se encuentra dentro de las columnas property.Once abrir la propiedad de la columna de edición se puede elegir qué columna que desea editar, desplácese hacia abajo a la sección de diseño de las propiedades de la columna encuadernada y cambie el ancho.

1
DataGridView1.Columns.Item("Adress").Width = 60 
    DataGridView1.Columns.Item("Phone").Width = 30 
    DataGridView1.Columns.Item("Name").Width = 40 
    DataGridView1.Columns.Item("Etc.").Width = 30 
9

Sé que esto es una vieja pregunta, pero nadie respondió a la primera parte, para ajustar la anchura en porcentaje. Eso se puede hacer fácilmente con FillWeight (MSDN). En caso de que alguien más busque esta respuesta.

Puede establecer DataGridAutoSizeColumnMode para rellenar el diseñador. Por omisión que da a cada FillWeight columna de 100. Luego, en código detrás, en caso FormLoad o después de la unión a la red de datos, puede simplemente:

gridName.Columns[0].FillWeight = 200; 
gridName.Columns[1].FillWeight = 50; 

Y así sucesivamente, por lo que el peso proporcional que desee. Si desea hacer cada columna con números que sumen 100, para un ancho de porcentaje literal, puede hacerlo también.

Proporciona un buen DataGrid completo donde los encabezados usan todo el espacio, incluso si el usuario cambia el tamaño de la ventana. Se ve bien en pantalla panorámica, 4: 3, lo que sea.

-2

o simplemente puede ir a la forma y cuando se llama a los datos que se muestra que establecer la propiedad como datagridview1.columns (0) = 150 .Width datagridview1.columns (1) .width = 150 datagridview1.columns (2) .width = 150 enter code here

tan simple funcionó tan bien para mí Bro

0

puede establecer la anchura y altura por defecto para todas las columnas y filas de la siguiente manera única con un lazo.

// DataGridView Name= dgvMachineStatus 

    foreach (DataGridViewColumn column in dgvMachineStatus.Columns) 
     { 
      column.Width = 155; 
     } 

    foreach (DataGridViewRow row in dgvMachineStatus.Rows) 
     { 
      row.Height = 45; 
     } 
Cuestiones relacionadas