In C# come si fa a fare le colonne di un DataGrid Adatta Larghezza Colonne come è possibile in Excel?

In C# come si fa a fare le colonne di un DataGrid Adatta Larghezza Colonne come è possibile in Excel? Attualmente il mio cinque colonne a larghezza fissa, ma le intestazioni di colonna può cambiare così vorrei che le colonne adatta alla larghezza della colonna.

Grazie

La domanda è su DataGrid (WPF), e le attuali risposte sono per DataGridView (WinForms), è corretto ?

OriginaleL’autore | 2008-11-06

4 Replies
  1. 7

    C’è una proprietà sul DataGridView chiamato AutoSizeColumnsMode che è un enum. I valori disponibili sono:

    AllCells

    AllCellsExceptHeader

    ColumnHeader

    DisplayedCells

    DisplayedCellsExceptHeader

    Riempire

    Nessuno

    OriginaleL’autore BFree

  2. 1

    C# questa è la mia funzione per aggiungere un DataGrid nel form con tutti in forma Colonne

       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 esempio per l’utilizzo di questa funzione…

         private void AddDataGrid(DataSet Ds)
        {
            AddDataGrid(new DataGrid { Dock = DockStyle.Fill }, this, Ds.Tables[0]);
    
        }

    OriginaleL’autore JVD2C

  3. 0

    VB questa è la mia funzione per aggiungere un DataGrid nel form con tutti in forma Colonne

    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 esempio per l’utilizzo di questa funzione…

    Private Sub AddDataGrid(ByVal Ds As DataSet)
    
        AddDataGrid(New DataGrid With {.Dock = DockStyle.Fill}, Me, Ds.Tables(0))
    
    End Sub

    OriginaleL’autore JVD2C

Lascia un commento