我想知道是否可以让dataGridView列自动调整其宽度到内容,同时可以由用户调整大小?
这是我到目前为止所尝试的内容:
dataGridView.AllowUserToResizeColumns = true;
dataGridView.Columns[0].AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGridView.Columns[0].Resizable = DataGridViewTriState.True;
但是,我仍然无法手动调整列大小。
如果有人已经遇到过此问题或有任何想法让我知道。
感谢。
答案 0 :(得分:16)
我终于找到了一种方法来做我想做的事。
想法是
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;
希望这会有所帮助。
答案 1 :(得分:2)
在上面的代码基础上迭代所有列并自动调整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;
答案 2 :(得分:0)
不明显的事情(不是我)是使用AutoSizeMode意味着我们希望管理大小,这意味着用户不会(不能)进行调整大小。所以我试过的似乎是使用DataGridView.AutoResizeColumn(请注意,它会对每列或大多数列进行一次性调整)然后将DataGridView.AllowUserToResizeColumns设置为true。可能还有其他变化,但重要的是AutoSizeMode的使用是互斥的,允许用户进行调整大小。
答案 3 :(得分:0)
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;
我不知道在表格显示之后这是怎么回事。
答案 4 :(得分:0)
您可以使用这个简单的代码:
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);
设置数据源后。它将设置宽度并允许调整大小。
答案 5 :(得分:-1)
简单的解决方案:绑定文件或模板文件。您可以使用ItemStyle-Width
<asp:BoundField DataField="SSSS" HeaderText="XXX" ItemStyle-Width="125px"/>
<asp:TemplateField HeaderText="EEEE" ItemStyle-Width="100px">