DataGridView列可自动调整宽度和大小
本文关键字:调整 DataGridView | 更新日期: 2023-09-27 18:23:51
我想知道是否可以让dataGridView列根据其内容自动调整宽度,同时由用户调整大小?
以下是我迄今为止尝试过的:
dataGridView.AllowUserToResizeColumns = true;
dataGridView.Columns[0].AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGridView.Columns[0].Resizable = DataGridViewTriState.True;
但是,我仍然无法手动调整列大小。
如果有人已经面临这个问题或有任何想法,请告诉我。
谢谢。
我终于找到了做我想做的事的方法。
想法是
- 让
dataGridView
调整列本身的大小以适应内容,然后 - 更改
AutoSizeColumnMode
并使用刚才存储的值设置宽度
这是代码:
dataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
int widthCol = dataGridView.Columns[i].Width;
dataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView.Columns[i].Width = widthCol;
希望这会有所帮助。
基于上面的代码对所有列进行迭代,并自动调整DataGridView
的宽度
//initiate a counter
int totalWidth = 0;
//Auto Resize the columns to fit the data
foreach (DataGridViewColumn column in mydataGridView.Columns)
{
mydataGridView.Columns[column.Index].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
int widthCol = mydataGridView.Columns[column.Index].Width;
mydataGridView.Columns[column.Index].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
mydataGridView.Columns[column.Index].Width = widthCol;
totalWidth = totalWidth + widthCol;
}
//the selector on the left of the DataGridView is about 45 in width
mydataGridView.Width = totalWidth + 45;
您只需使用以下简单代码:
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);
设置数据源后。它将设置宽度并允许调整大小。
不明显的是(对我来说不是)使用AutoSizeMode意味着我们希望管理大小,这意味着用户不会(不能)调整大小。因此,我尝试过的似乎是对每一列或大多数列使用DataGridView.AutoResizeColumn(注意它会一次性调整大小),然后将DataGridView.AllowUserToResizeColumns设置为true。可能还有其他变体,但重要的是AutoSizeMode的使用与允许用户进行调整大小是互斥的。
- 感谢上面的解决方案(要迭代
DataGridView.Columns
,请将AutoSizeMode
更改为有效值,收集宽度值,并在将AutoSizeMode
更改为DataGridViewAutoSizeColumnMode.None
后将其设置回) - 我很难理解它,并注意到无论何时从类构造函数或
Form.Show()
或Form.ShowDialog()
之前的任何行调用它,它都不会工作。所以我把这个代码片段放在Form.Shown
事件中,这对我很有用 -
我的转换代码,不需要之前设置的任何
DataGridView.AutoSizeColumnsMode
,我使用DataGridViewColumn.GetPreferredWidth()
而不是更改DataGridViewColumn.AutoSizeMode
,并立即设置宽度值,然后更改DataGridView.AutoSizeColumnsMode
一次:private void form_Shown(object sender, EventArgs e) { foreach (DataGridViewColumn c in dataGridView.Columns) c.Width = c.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, true); dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; }
-
一定要设置
dataGridView.AllowUserToResizeColumns = true;
-
我不知道为什么只有在表格显示后才能使用。
简单的解决方案:绑定文件或模板文件。你可以使用ItemStyle-Width
<asp:BoundField DataField="SSSS" HeaderText="XXX" ItemStyle-Width="125px"/>
<asp:TemplateField HeaderText="EEEE" ItemStyle-Width="100px">