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;