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列可自动调整宽度和大小

我终于找到了做我想做的事的方法。

想法是

  • 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">