DataGridView列自动调整宽度和可调整大小

时间:2013-07-18 14:27:49

标签: c# .net datagridview

我想知道是否可以让dataGridView列自动调整其宽度到内容,同时可以由用户调整大小?

这是我到目前为止所尝试的内容:

dataGridView.AllowUserToResizeColumns = true;
dataGridView.Columns[0].AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGridView.Columns[0].Resizable = DataGridViewTriState.True;

但是,我仍然无法手动调整列大小。

如果有人已经遇到过此问题或有任何想法让我知道。

感谢。

6 个答案:

答案 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">