with contenido columns columnas columna autosizecolumnsmode ancho ajustar c# datagrid

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



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