DataGridView自动调整和填充

我有我的DataGridView 3列。 我想要做的是有前2列自动适应内容的宽度,并有第三列填补剩余的空间。

在WinForms中可以做到吗? 我正在从EF DataContext加载我的数据,如果这是任何使用。 我已经包括了它目前的样子。

在这里输入图像说明

您需要使用DataGridViewColumn.AutoSizeMode属性。

您可以将这些值之一用于列0和1:

AllCells: 列宽调整以适应列中所有单元格的内容,包括标题单元格。
AllCellsExceptHeader: 列宽调整以适应列中所有单元格的内容,不包括标题单元格。
DisplayedCells: 列宽调整,以适应当前显示在屏幕上的行中所有单元格的内容,包括标题单元格。
DisplayedCellsExceptHeader: 列宽调整,以适应当前显示在屏幕上的列中所有单元格的内容,不包括标题单元格。

然后你使用第2列的填充

列的宽度调整,以便所有列的宽度正好填满控件的显示区域…

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

正如其他用户指出的那样,可以使用DataGridView.AutoSizeColumnsMode属性在datagridview级别设置默认值。

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

可能:

 this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; 

重要的提示:

如果您的网格绑定到数据源并且列是自动生成的( AutoGenerateColumns属性设置为True),则需要使用DataBindingComplete事件来应用样式AFTER列已创build。


在一些情况下(例如通过代码更改单元格的值),我必须调用DataGridView1.AutoResizeColumns(); 刷新网格。

这是我最喜欢的方法

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

没有testing,但你可以试试。 testing和工作。 我希望你可以玩DataGridViewColum AutoSizeMode来实现你所需要的。

尝试设置

 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; 

这应该工作

只需从 AutoSizeColumnsMode:Fill 属性中更改属性: AutoSizeColumnsMode:Fill

或通过代码

dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;

试着做,

  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); } } 
 public void setHeight(DataGridView src) { src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 + src.Rows.OfType<DataGridViewRow>().Where(row => row.Visible).Sum(row => row.Height); } 

尝试这个 :

  DGV.AutoResizeColumns(); DGV.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells;