8

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

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

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

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

如果有人已经遇到过这个问题或有任何想法,请告诉我。

谢谢。

4

6 回答 6

18

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

这个想法是

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

希望这会有所帮助。

于 2013-07-19T13:45:10.260 回答
1

基于上面的代码对所有列进行迭代,并自动调整宽度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; 
于 2016-04-05T11:18:58.780 回答
0

不明显的事情(对我来说不是)是使用 AutoSizeMode 意味着我们希望管理大小,这意味着用户不会(不能)调整大小。因此,我尝试过并且似乎可行的是对每一列或大多数列使用 DataGridView.AutoResizeColumn (请注意,它会一次性调整大小),然后将 DataGridView.AllowUserToResizeColumns 设置为 true。可能还有其他变体,但重要的是 AutoSizeMode 的使用与允许用户调整大小是互斥的。

于 2016-12-07T23:47:15.623 回答
0
  • 感谢上面的解决方案(要遍历DataGridView.Columns,更改为有效的,收集宽度值并在更改为AutoSizeMode后将其设置回来)。AutoSizeModeDataGridViewAutoSizeColumnMode.None
  • Form.Show()我为此苦苦挣扎,并注意到每当从类构造函数或or之前的任何行调用它时它都不起作用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;
    
  • 我不知道这仅在显示表格后才有效。

于 2017-04-13T14:38:21.813 回答
0

你可以使用这个简单的代码:

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);

设置数据源后。它将设置宽度并允许调整大小。

于 2018-01-19T11:04:12.467 回答
-1

简单的解决方案:绑定文件或模板文件。您可以使用ItemStyle-Width

<asp:BoundField DataField="SSSS" HeaderText="XXX"  ItemStyle-Width="125px"/>
<asp:TemplateField HeaderText="EEEE" ItemStyle-Width="100px">
于 2019-04-05T14:41:07.680 回答