我在我的DataGridView
中有3列。我想要做的是让前两列自适应内容的宽度,第三列填满剩余空间。
在WinForms中是否有可能实现?如果有用的话,我的数据是从EF DataContext中加载的。我已经包含了当前显示状态的图片。
我在我的DataGridView
中有3列。我想要做的是让前两列自适应内容的宽度,第三列填满剩余空间。
在WinForms中是否有可能实现?如果有用的话,我的数据是从EF DataContext中加载的。我已经包含了当前显示状态的图片。
您需要使用 DataGridViewColumn.AutoSizeMode
属性。
对于第0列和第1列,您可以使用以下值:
AllCells: 列宽度根据列中所有单元格(包括标题单元格)的内容调整。
AllCellsExceptHeader: 列宽度根据列中除标题单元格以外的所有单元格的内容调整。
DisplayedCells: 列宽度根据列中当前在屏幕上显示的所有行中的所有单元格的内容调整(包括标题单元格)。
DisplayedCellsExceptHeader: 列宽度根据列中当前在屏幕上显示的除标题单元格以外的所有行中的所有单元格的内容调整。
然后对于第2列,您需要使用 Fill 值
列宽度调整为所有列的宽度恰好填充控件的显示区域...
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
事件应用样式。
在某些情况下(例如通过代码更改单元格值),我必须调用 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;
}
};
只需更改控件的属性即可:
AutoSizeColumnsMode:Fill
或者通过代码实现
dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;
没有经过测试,但您可以尝试一下。已测试并且可行。我希望您可以尝试使用DataGridViewColumn
的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;
试着去做,
AutoSizeColumnMode = Fill;
dataGrid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
。请只返回翻译后的文本内容,不要进行解释。 - undefined为了让“first_name”列在其他列无法填充空间时也能填充,我所做的是:
当网格变得很小时,“first_name”列几乎看不见(非常细),因此我可以将 DataGridViewAutoSizeColumnMode
属性设置为AllCells
,就像其他可见列一样。出于性能考虑,在数据绑定之前需要将它们设置为 None
,并在网格的 DataBindingComplete
事件处理程序中设置回 AllCells
。希望这会有所帮助!
private void dataGridView1_Resize(object sender, EventArgs e)
{
int ColumnsWidth = 0;
foreach(DataGridViewColumn col in dataGridView1.Columns)
{
if (col.Visible) ColumnsWidth += col.Width;
}
if (ColumnsWidth <dataGridView1.Width)
{
dataGridView1.Columns["first_name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
else if (dataGridView1.Columns["first_name"].Width < 10)
{
dataGridView1.Columns["first_name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}
}
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);
}
}
GridCol
访问每个列的AutoSizeMode
和FillWeight
属性。其次,它将每个列的AutoSizeMode
设置为两个不同的值;第二个赋值将覆盖第一个。 - JonPmyDgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
myDgv.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.None).AutoSizeMode =
DataGridViewAutoSizeColumnMode.Fill;
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;