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

问题描述 投票:7回答:6

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

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

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

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

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

谢谢。

c# .net datagridview
6个回答
16
投票

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

这个想法是

  • dataGridView调整列本身以适应内容,然后
  • 更改theAutoSizeColumnMode并使用刚刚存储的值设置宽度。

这是代码:

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; 

0
投票

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


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;
  • 我不知道为什么这只在表格显示后才有效。

0
投票

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

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);

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


-1
投票

简单的解决方案:绑定字段或模板提交。你可以使用ItemStyle-Width

<asp:BoundField DataField="SSSS" HeaderText="XXX"  ItemStyle-Width="125px"/>
<asp:TemplateField HeaderText="EEEE" ItemStyle-Width="100px">
© www.soinside.com 2019 - 2024. All rights reserved.