【问题标题】:DataGridView column auto adjust width and resizableDataGridView 列自动调整宽度和可调整大小
【发布时间】:2013-07-18 14:27:49
【问题描述】:

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

这是我迄今为止尝试过的:

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

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

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

谢谢。

【问题讨论】:

  • DataGridView 列是否默认可调整大小?当您删除所有这些代码时会发生什么?你可以调整它们的大小吗?
  • 是的列可以调整大小。我的数据网格中有其他列可以调整大小。但是一旦我将 AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells 设置为一列,这个特定的列就不能再调整大小了,而其他列是。

标签: c# .net datagridview


【解决方案1】:

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

这个想法是

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

希望这会有所帮助。

【讨论】:

    【解决方案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; 
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        • 感谢上述解决方案(要遍历DataGridView.Columns,将AutoSizeMode 更改为有效值,收集宽度值并在将AutoSizeMode 更改为DataGridViewAutoSizeColumnMode.None 后将其设置回来)。
        • 我一直在努力解决它,并注意到每当从类构造函数或Form.Show()Form.ShowDialog() 之前的任何行调用它时它都不起作用。所以我把这段代码 sn-p 放在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;
          
        • 我不知道为什么这只有在显示表单后才有效。

        【讨论】:

          【解决方案5】:

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

          dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);
          

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

          【讨论】:

            【解决方案6】:

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

            <asp:BoundField DataField="SSSS" HeaderText="XXX"  ItemStyle-Width="125px"/>
            <asp:TemplateField HeaderText="EEEE" ItemStyle-Width="100px">
            

            【讨论】:

            • 你能否详细说明你的答案并提供一个具体的例子?什么是“归档”?这应该读“字段”还是“文件”?完成后我会投票。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-04-18
            • 2017-02-10
            • 2014-06-28
            • 2015-09-05
            • 2012-03-24
            • 2012-11-12
            • 1970-01-01
            相关资源
            最近更新 更多