2010-06-15 159 views
11

在我的C#4.0应用程序中,我有一个DataGridView来显示一些数据。我希望列的大小相应的内容,所以我设置AutoSizeColumnsMode AllCellsExceptHeader。但我想限制列增长超过一定的价值。有一个MinimumWidth属性...但不幸的是没有MaximumWidth属性。DataGridView自动调整大小,但限制最大列大小

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

由于提前, 弗兰克

回答

11

我成功地做到这一点,是检查列宽度附加行之后,检查宽度,如果它的大小超过我最大,我设置的唯一途径它手动更改后的列AutoSizeMode到DataGridViewAutoSizeColumnMode.None

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

当然,你需要在添加/更新/删除行,并再次做的程序重新设置AutoSizeColumnsMode到AllCellsExceptHeader。

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更改为您想要的任何最大值。

+1

只是注意到这是一个C#的问题与vb.net的答案,抱歉'关于这一点。但你应该能够翻译。 :-) – Luke 2017-09-08 06:48:45