C# DataGridView自动调整大小,但限制最大列大小

C# DataGridView自动调整大小,但限制最大列大小,c#,datagridview,C#,Datagridview,在我的C#4.0应用程序中,我有一个DataGridView来显示一些数据。我希望列的大小与内容相应,因此我将AutoSizeColumnsMode设置为AllCellsCeptheader。但是我想限制列的增长超过某个值。有一个MinimumWidth属性。。。但不幸的是,没有MaximumWidth属性 有什么办法解决这个问题吗 提前感谢,, Frank我做到这一点的唯一方法是在添加行后检查列宽,检查宽度,如果它的大小高于我的最大值,则在将列AutoSizeMode更改为DataGridVi

在我的C#4.0应用程序中,我有一个DataGridView来显示一些数据。我希望列的大小与内容相应,因此我将AutoSizeColumnsMode设置为AllCellsCeptheader。但是我想限制列的增长超过某个值。有一个MinimumWidth属性。。。但不幸的是,没有MaximumWidth属性

有什么办法解决这个问题吗

提前感谢,,
Frank

我做到这一点的唯一方法是在添加行后检查列宽,检查宽度,如果它的大小高于我的最大值,则在将列AutoSizeMode更改为DataGridViewAutoSizeColumnMode后手动设置。无

      foreach(DataGridViewColumn c in myView.Columns)
            if (c.Width > myMax)
            {
                c.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
                c.Width = myMax;
            }

当然,当您添加/更新/删除行时,您需要再次将AutoSizeColumnsMode设置为AllCellsCeptheader,然后再次执行该过程。

我知道这是一个较老的问题,但我自己也遇到了,并得到了一个不错的(我想是)解决方案

' Eventhandler 
Private Sub DataGridView1_ColumnWidthChanged(sender As Object, e As DataGridViewColumnEventArgs)

// If my Grid refreshes this event doesnt work properly so I stop it from firing
    If isRefreshing Then Exit Sub

    Dim col As DataGridViewColumn = e.Column
    If col.AutoSizeMode = DataGridViewAutoSizeColumnMode.None Then //optional
        Dim isWidth As Integer = col.Width
        Dim prefWidth As Integer = col.GetPreferredWidth(DataGridViewAutoSizeColumnMode.AllCellsExceptHeader, True)
        If isWidth > prefWidth Then col.Width = prefWidth
    End If
End Sub
在这种情况下,我的MaxWidth是预查找的宽度。您可以将prefWidth更改为所需的最大值。

我的版本是

private const int GridAutoResizeBoundary = 100;
private const int MaxColumnWidth = 300;

public static void AutoSizeColumns(this DataGridView dataGridView)
{
    if (dataGridView.RowCount <= GridAutoResizeBoundary)
        dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
    else
        dataGridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);

    foreach (DataGridViewColumn column in dataGridView.Columns)
    {
        if (column.Width > MaxColumnWidth)
            column.Width = MaxColumnWidth;
    }
}
private const int GridAutoResizeBoundary=100;
private const int MaxColumnWidth=300;
公共静态void AutoSizeColumns(此DataGridView DataGridView)
{
if(dataGridView.RowCount MaxColumnWidth)
列宽=MaxColumnWidth;
}
}

刚刚注意到这是一个带有vb.net答案的c#问题,对此表示抱歉。但是你应该能够翻译它。:-)翻译得很好。另请注意,在C#中,更改列宽会触发此事件。如果您不希望在设置
col.Width=prefWidth
时花费额外的计算时间来检查和重新检查列,则最好在设置的代码开头包含第二个标志。我不知道这种行为在VB.net中是否相同。这改变了整个datagridview的AutoResizeMode,您不希望这样。