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;