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

时间:2010-06-15 13:56:06

标签: c# datagridview

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

任何想法如何解决这个问题?

提前致谢, 弗兰克

3 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:3)

我知道这是一个较老的问题,但我自己面对它并得到了一个不错的(我猜它是)解决方案;

' 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是Prefferred Width。您可以将prefWidth更改为您想要的最大值。

答案 2 :(得分:0)

我的版本是

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