DataGridView Авторазмер, но ограничивает максимальный размер столбца - PullRequest
12 голосов
/ 15 июня 2010

в моем приложении C # 4.0 у меня есть DataGridView для отображения некоторых данных. Я хочу, чтобы размер столбцов соответствовал содержимому, поэтому для AutoSizeColumnsMode я установил AllCellsExceptHeader. Но я хочу ограничить рост столбцов за пределы определенного значения. Существует свойство MinimumWidth ... но, к сожалению, нет свойства MaximumWidth.

Есть идеи, как решить эту проблему?

Спасибо заранее, Frank

Ответы [ 3 ]

11 голосов
/ 08 мая 2011

Единственный способ, которым мне удалось это сделать, - это проверить ширину столбцов после добавления в нее строк, проверить ширину, и если ее размер превышает мой максимальный, я устанавливаю его вручную после изменения столбцов AutoSizeMode на DataGridViewAutoSizeColumnMode.None.

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

Естественно, вам нужно будет снова установить AutoSizeColumnsMode на AllCellsExceptHeader при добавлении / обновлении / удалении строк и повторной процедуре.

3 голосов
/ 08 июля 2016

Я знаю, что это старая проблема, но я столкнулся с ней сам и нашел достойное (думаю, так) решение;

' 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 на любой максимум, который вы хотите.

0 голосов
/ 18 февраля 2019

Моя версия

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...