在我的C#4.0应用程序中,我有一个DataGridView来显示一些数据。我希望列大小与内容相对应,因此我将AutoSizeColumnsMode设置为AllCellsExceptHeader。但我想限制列增长超过一定值。有一个MinimumWidth属性......但遗憾的是没有MaximumWidth属性。
任何想法如何解决这个问题?
提前致谢, 弗兰克
答案 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;
}
}