开发者

DataGridView Autosize but restrict max column size

in my C# 4.0 Application, I have a DataGridView to display some data. I want the Columns size accordingly to the content, so I set the AutoSizeColumnsMode to AllCellsExceptHeader. But I want to restrict the columns to grow beyond a certain value. There is a MinimumWidth Property ... but unfortunately no MaximumWidth Property.

Any ideas how to solve 开发者_如何学编程this?

Thanks in advance, Frank


The only way i managed to do that, is to check the columns width after adding rows to it, check the width, and if it's size is above my max, i set it manually after changing the columns AutoSizeMode to DataGridViewAutoSizeColumnMode.None

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

Naturally, you'd need to set the AutoSizeColumnsMode to AllCellsExceptHeader again when you add/update/delete rows and do the procedure again.


I know it's an older problem, but i faced it myself and got a decent (I guess it is) solution;

' 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

In this case my MaxWidth is the Prefferred Width. You can change prefWidth to whatever maximum you want.


My version is

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜