contenido - En C#¿cómo se hacen las columnas en un DataGrid AutoFit Column Width como se puede en Excel?
fill columns datagridview c# (4)
Hay una propiedad en DataGridView llamada AutoSizeColumnsMode que es una enumeración. Los valores disponibles son:
AllCells
AllCellsExceptHeader
Encabezado de la columna
DisplayedCells
DisplayedCellsExceptHeader
Llenar
Ninguna
En C # ¿cómo se hacen las columnas en un DataGrid AutoFit Column Width como se puede en Excel? Actualmente, mis cinco columnas son de ancho fijo, pero los encabezados de las columnas pueden cambiar, por lo que me gustaría que las columnas se ajusten automáticamente al ancho de la columna.
Gracias
Para llevar la respuesta de BFree un paso más allá:
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.autoresizecolumns.aspx
C # esta es mi función para agregar un DataGrid en su formulario con todas las Columnas ajustadas
public static DataGrid AddDataGrid(DataGrid DG, object Me, System.Data.DataTable DS)
{
try {
DG.DataSource = DS;
Me.Controls.Add(DG);
DataGridTableStyle TblS = new DataGridTableStyle { MappingName = DS.TableName };
DG.TableStyles.Clear();
DG.TableStyles.Add(TblS);
for (ColIndex = 0; ColIndex <= DS.Columns.Count - 1; ColIndex++) {
int maxlength = 0;
Graphics g = DG.CreateGraphics();
// Take width of one blank space and add to the new width of the Column.
int offset = Convert.ToInt32(Math.Ceiling(g.MeasureString(" ", DG.Font).Width));
int i = 0;
int intaux = 0;
string straux = null;
int tot = DS.Rows.Count;
for (i = 0; i <= (tot - 1); i++) {
straux = DS.Rows[i][ColIndex].ToString();
// Get the width of Current Field String according to the Font.
intaux = Convert.ToInt32(Math.Ceiling(g.MeasureString(straux, DG.Font).Width));
if ((intaux > maxlength)) {
maxlength = intaux;
}
}
// Assign New Width to DataGrid column.
DG.TableStyles(DS.TableName).GridColumnStyles(ColIndex).Width = maxlength + offset;
}
} catch (Exception ex) {
Debug.WriteLine(ex.Message);
} finally {
DG.Show();
}
return DG;
}
un ejemplo para usar esta función ...
private void AddDataGrid(DataSet Ds)
{
AddDataGrid(new DataGrid { Dock = DockStyle.Fill }, this, Ds.Tables[0]);
}
VB esta es mi función para agregar un DataGrid en su formulario con todas las Columnas ajustadas
Shared Function AddDataGrid(ByVal DG As DataGrid, ByVal This As Object, ByVal DS As System.Data.DataTable) As DataGrid
Try
DG.DataSource = DS
This.Controls.Add(DG)
Dim TblS As New DataGridTableStyle() With {.MappingName = DS.TableName}
DG.TableStyles.Clear()
DG.TableStyles.Add(TblS)
For ColIndex = 0 To DS.Columns.Count - 1
Dim maxlength As Integer = 0
Dim g As Graphics = DG.CreateGraphics()
'' Take width of one blank space and add to the new width of the Column.
Dim offset As Integer = Convert.ToInt32(Math.Ceiling(g.MeasureString(" ", DG.Font).Width))
Dim i As Integer = 0
Dim intaux As Integer
Dim straux As String
Dim tot As Integer = DS.Rows.Count
For i = 0 To (tot - 1)
straux = DS.Rows(i)(ColIndex).ToString()
'' Get the width of Current Field String according to the Font.
intaux = Convert.ToInt32(Math.Ceiling(g.MeasureString(straux, DG.Font).Width))
If (intaux > maxlength) Then
maxlength = intaux
End If
Next
'' Assign New Width to DataGrid column.
DG.TableStyles(DS.TableName).GridColumnStyles(ColIndex).Width = maxlength + offset
Next
Catch ex As Exception
Debug.WriteLine(ex.Message)
Finally
DG.Show()
End Try
Return DG
End Function
un ejemplo para usar esta función ...
Private Sub AddDataGrid(ByVal Ds As DataSet)
AddDataGrid(New DataGrid With {.Dock = DockStyle.Fill}, Me, Ds.Tables(0))
End Sub