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.
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 datagridview
mit 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 AutoGenerateColumns
auf True gesetzt), müssen Sie das Ereignis DataBindingComplete
NAME _ 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.
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;
}
};
Ändern Sie einfach die Eigenschaft von der Eigenschaft der Kontrolle: AutoSizeColumnsMode:Fill
OR Nach Code
dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;
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
Versuchen Sie es zu tun,
AutoSizeColumnMode = Fill;
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);
}
}