Necesitas usar la DataGridViewColumn.AutoSizeMode
propiedad.
Puede utilizar uno de estos valores para las columnas 0 y 1:
AllCells: el ancho de la columna se ajusta para adaptarse al contenido de todas las celdas de la columna, incluida la celda del encabezado.
AllCellsExceptHeader: el ancho de la columna se ajusta para ajustarse al contenido de todas las celdas de la columna, excluyendo la celda del encabezado.
DisplayedCells: el ancho de la columna se ajusta para adaptarse al contenido de todas las celdas de la columna que se encuentran en las filas que se muestran actualmente en pantalla, incluida la celda del encabezado.
DisplayedCellsExceptHeader: el ancho de la columna se ajusta para adaptarse al contenido de todas las celdas de la columna que están en las filas que se muestran actualmente en pantalla, excluyendo la celda del encabezado.
Luego usa el valor de relleno para la columna 2
El ancho de la columna se ajusta de modo que el ancho de todas las columnas llene exactamente el área de visualización del control ...
this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
Como señalaron otros usuarios, el valor predeterminado se puede establecer al datagridview
nivel de la DataGridView.AutoSizeColumnsMode
propiedad.
this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
podría ser:
this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
Nota IMPORTANTE:
Si su cuadrícula está vinculada a una fuente de datos y las columnas se generan automáticamente (la AutoGenerateColumns
propiedad se establece en True), debe usar el DataBindingComplete
evento para aplicar el estilo DESPUÉS de que se hayan creado las columnas.
En algunos escenarios (cambiar el valor de las celdas por código, por ejemplo), tuve que llamar DataGridView1.AutoResizeColumns();
para actualizar la cuadrícula.
Este es mi enfoque favorito ...
_dataGrid.DataBindingComplete += (o, _) => { var dataGridView = o as DataGridView; if (dataGridView != null) { dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } };
fuente
index out of bound exception
simplemente corríjalo, ¡gracias!Simplemente cambie Propiedad de propiedad de control:
AutoSizeColumnsMode:Fill
O por código
dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;
fuente
No probado, pero puedes intentarlo.Probado y funcionando. Espero que pueda jugar conAutoSizeMode
deDataGridViewColum
lograr lo que necesita.Intenta configurar
dataGridView1.DataSource = yourdatasource;<--set datasource before you set AutoSizeMode //Set the following properties after setting datasource dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
Esto debería funcionar
fuente
Trata de hacerlo,
fuente
public static void Fill(DataGridView dgv2) { try { dgv = dgv2; foreach (DataGridViewColumn GridCol in dgv.Columns) { for (int j = 0; j < GridCol.DataGridView.ColumnCount; j++) { GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; GridCol.DataGridView.Columns[j].FillWeight = 1; } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
fuente
GridCol
. En segundo lugar, establece AutoSizeMode para cada columna en dos valores diferentes; la segunda asignación sobrescribirá la primera.Para construir sobre la respuesta de AlfredBr, si ocultó algunas de sus columnas, puede usar lo siguiente para ajustar automáticamente el tamaño de todas las columnas y luego hacer que la última columna visible llene el espacio vacío:
fuente
Esto es lo que hice para que la columna "first_name" llene el espacio cuando todas las columnas no pueden hacerlo.
Cuando la cuadrícula se vuelve pequeña, la columna "first_name" se vuelve casi invisible (muy delgada), por lo que puedo establecer DataGridViewAutoSizeColumnMode en AllCells como las otras columnas visibles. Para problemas de rendimiento, es importante establecerlos en None antes de vincularlos y volver a establecerlos en AllCell en el controlador de eventos DataBindingComplete de la cuadrícula. ¡Espero eso ayude!
private void dataGridView1_Resize(object sender, EventArgs e) { int ColumnsWidth = 0; foreach(DataGridViewColumn col in dataGridView1.Columns) { if (col.Visible) ColumnsWidth += col.Width; } if (ColumnsWidth <dataGridView1.Width) { dataGridView1.Columns["first_name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } else if (dataGridView1.Columns["first_name"].Width < 10) dataGridView1.Columns["first_name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; }
fuente
public void setHeight(DataGridView src) { src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 + src.Rows.OfType<DataGridViewRow>().Where(row => row.Visible).Sum(row => row.Height); }
fuente
Prueba esto :
fuente