C# DataGridView列的自动调整大小模式

4
我希望默认情况下列使用
AutoSizeMode = DisplayedCells;

我希望能够调整列的大小,但是DisplayedCells类型不允许调整大小。

有什么想法吗?

5个回答

6

你可以在方便的时候调用子方法 DataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells),比如在加载数据之后。不要修改DataGridView.AutoSizeColumnsMode属性,这样用户仍然可以自己调整列的大小,但是他们会有一个舒适的起点。两全其美。


我的方法有效。唯一的真正问题是需要在调用 AutoResizeColumns(int columnIndex, DataGridViewAutoSizeColumnsMode dataGridViewAutoSizeColumnsMode) 之前,在 DataGridView 上调用 Refresh() - Derek W

2
我认为你无法实现这一点,因为一旦AutoSizeMode设置为DisplayedCells,所有的行为都由设计控制。但是我有一个想法。你应该保持列(我假设Columns[0]只是为了举例)的AutoSizeMode固定在DataGridViewAutoSizeColumnMode.None。你想将它设置为DisplayedCells,因为你可能希望根据单元格文本长度来展开或收缩列宽度。所以我的想法是每次CellBeginEdit开始时,我们将AutoSizeMode设置为DisplayedCells,当CellEndEdit开始时,我们保存宽度(它已经为您自动调整大小),然后将AutoSizeMode重置为None,然后将列宽度分配给保存的值。这是我的代码:
//First before loading data
private void form_Load(object sender, EventArgs e){
   dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
   //Fill your dataGridView here
   //.........
   //.........
   int w = dataGridView.Columns[0].Width;
   //reset to None
   dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
   dataGridView.Columns[0].Width = w;
}
//Now for CellBeginEdit and CellEndEdit
private void dataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {
        if(e.ColumnIndex == 0) //because I suppose the interested column here is Columns[0]
           dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
    }
private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        if(e.ColumnIndex == 0){
          int w = dataGridView.Columns[0].Width;
          dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
          dataGridView.Columns[0].Width = w;
        }
    }

我测试了这段代码,看起来运行正常。但有一种情况下它可能无法工作,那就是当单元格的值被代码改变时,我们没有添加相应的代码。
我必须说,你的需求有点奇怪,我不太关心列宽,用户应该知道如何处理它。

1

行:

dataGridView1.AutoResizeRow(2, DataGridViewAutoSizeRowMode.AllCellsExceptHeader);

栏目:

dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;

谢谢@Gorfi,但是使用allcells也是一样的,无法编辑大小。 - ghiboz

0
在我的一个应用程序中,我将autosize设置为displayedcells。然后一旦表单加载完成,我关闭autosize以允许用户进行调整大小。
private void Form1_Load(object sender, EventArgs e)
    {

        //  Designer has autosize set to displayedcells.
        dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;   // Turn off autosize
        dataGridView1.AllowUserToResizeRows = true;                                 // Turn on letting user size columns
        dataGridView1.AllowUserToOrderColumns = true;
    }

0

在Visual Studio 2008(和VB.net)中,对我有效的唯一方法是:

 For i As Integer = 0 To grdList2.Columns.Count - 1
  If i <> (grdList2.Columns.Count - 1) Then
   grdList2.Columns(i).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
  Else
   grdList2.Columns(i).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
  End If
 Next

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接