2010-06-15 162 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