我的DataGridView
中有3列。我想要做的是让前2列自动适应内容的宽度,并让第3列填充剩余空间。
是否可以在WinForms中执行?我正在从EF DataContext加载我的数据,如果它有用的话。我已经包含了目前看起来如何的图像。
答案 0 :(得分:139)
您需要使用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
级别DataGridView.AutoSizeColumnsMode
属性。
this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
可能是:
this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
重要提示:
如果您的网格绑定到数据源并且自动生成列(AutoGenerateColumns
属性设置为True),则需要使用DataBindingComplete
事件来应用样式 AFTER 列已创建。
在某些情况下(例如,按代码更改单元格值),我不得不调用DataGridView1.AutoResizeColumns();
来刷新网格。
答案 1 :(得分:20)
这是我最喜欢的方法......
_dataGrid.DataBindingComplete += (o, _) =>
{
var dataGridView = o as DataGridView;
if (dataGridView != null)
{
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
};
答案 2 :(得分:8)
只需从控件属性中更改属性:
AppCompatActivity
或按代码
AutoSizeColumnsMode:Fill
答案 3 :(得分:4)
未经测试,但您可以尝试一下。经过测试和工作。我希望您可以使用AutoSizeMode
DataGridViewColum
来实现您的需求。
尝试设置
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;
这应该有效
答案 4 :(得分:0)
尝试做,
AutoSizeColumnMode = Fill;
答案 5 :(得分:0)
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);
}
}
答案 6 :(得分:0)
要基于AlfredBr的答案,如果您隐藏了某些列,则可以使用以下代码自动调整所有列的大小,然后仅将最后一个可见列填充空白处:
myDgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
myDgv.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.None).AutoSizeMode =
DataGridViewAutoSizeColumnMode.Fill;
答案 7 :(得分:-1)
public void setHeight(DataGridView src)
{
src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 + src.Rows.OfType<DataGridViewRow>().Where(row => row.Visible).Sum(row => row.Height);
}
答案 8 :(得分:-2)
试试这个:
DGV.AutoResizeColumns();
DGV.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells;