web-dev-qa-db-de.com

DataGridView AutoFit und Fill

Ich habe 3 Spalten in meiner DataGridView. Was ich versuche zu tun, ist, dass die ersten 2 Spalten automatisch an die Breite des Inhalts angepasst werden und die dritte Spalte den verbleibenden Platz ausfüllt.

Ist es in WinForms möglich? Ich lade meine Daten von einem EF DataContext, falls dies von Nutzen ist. Ich habe ein Bild mit aufgenommen, wie es momentan aussieht.

enter image description here

70
James Jeffery

Sie müssen die Eigenschaft DataGridViewColumn.AutoSizeMode verwenden.

Sie können einen dieser Werte für Spalte 0 und 1 verwenden:

AllCells: Die Spaltenbreite passt sich dem Inhalt aller Zellen in der Spalte an, einschließlich der Kopfzelle.
AllCellsExceptHeader: Die Spaltenbreite passt sich an den Inhalt aller Zellen in der Spalte an, mit Ausnahme der Kopfzelle.
DisplayedCells: Die Spaltenbreite passt sich an den Inhalt aller Zellen in der Spalte an, die sich in Zeilen befinden, die derzeit auf dem Bildschirm angezeigt werden. einschließlich der Header-Zelle.
DisplayedCellsExceptHeader: Die Spaltenbreite passt sich an den Inhalt aller Zellen in der Spalte an, die sich in den aktuell auf dem Bildschirm angezeigten Zeilen befinden. ohne die Header-Zelle.

Dann verwenden Sie den WertFillfür Spalte 2

Die Spaltenbreite wird so angepasst, dass die Breite aller Spalten genau den Anzeigebereich des Steuerelements ausfüllt ...

_this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
_

Wie von anderen Benutzern angegeben, kann der Standardwert auf der Ebene datagridviewmit der Eigenschaft DataGridView.AutoSizeColumnsMode festgelegt werden.

_this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
_

könnte sein:

_this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
_

Wichtiger Hinweis:

Wenn Ihr Raster an eine Datenquelle gebunden ist und die Spalten automatisch generiert werden (Eigenschaft AutoGenerateColumnsauf True gesetzt), müssen Sie das Ereignis DataBindingCompleteNAME _ verwenden, um den StilDANACH ANZUWENDENSpalten wurden erstellt.


In einigen Szenarien (z. B. Ändern des Zellenwerts durch Code) musste ich DataGridView1.AutoResizeColumns(); aufrufen, um das Raster zu aktualisieren.

147
Chris

Das ist mein Lieblingsansatz ...

_dataGrid.DataBindingComplete += (o, _) =>
    {
        var dataGridView = o as DataGridView;
        if (dataGridView != null)
        {
           dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
           dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        }
    };
19
AlfredBr

Ändern Sie einfach die Eigenschaft von der Eigenschaft der Kontrolle: AutoSizeColumnsMode:Fill

OR Nach Code

dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;

6

Nicht getestet, aber Sie können es versuchen. Getestet und funktioniert. Ich hoffe, Sie können mit AutoSizeMode von DataGridViewColum spielen, um das zu erreichen, was Sie brauchen.

Versuchen Sie die Einstellung 

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;

Das sollte funktionieren

4

Versuchen Sie es zu tun,

 AutoSizeColumnMode = Fill;
0
Aki
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);
        }
    }
0
Jay