C# DataGridView自动调整大小,但限制最大列大小
在我的C#4.0应用程序中,我有一个DataGridView来显示一些数据。我希望列的大小与内容相应,因此我将AutoSizeColumnsMode设置为AllCellsCeptheader。但是我想限制列的增长超过某个值。有一个MinimumWidth属性。。。但不幸的是,没有MaximumWidth属性 有什么办法解决这个问题吗 提前感谢,,C# DataGridView自动调整大小,但限制最大列大小,c#,datagridview,C#,Datagridview,在我的C#4.0应用程序中,我有一个DataGridView来显示一些数据。我希望列的大小与内容相应,因此我将AutoSizeColumnsMode设置为AllCellsCeptheader。但是我想限制列的增长超过某个值。有一个MinimumWidth属性。。。但不幸的是,没有MaximumWidth属性 有什么办法解决这个问题吗 提前感谢,, Frank我做到这一点的唯一方法是在添加行后检查列宽,检查宽度,如果它的大小高于我的最大值,则在将列AutoSizeMode更改为DataGridVi
Frank我做到这一点的唯一方法是在添加行后检查列宽,检查宽度,如果它的大小高于我的最大值,则在将列AutoSizeMode更改为DataGridViewAutoSizeColumnMode后手动设置。无
foreach(DataGridViewColumn c in myView.Columns)
if (c.Width > myMax)
{
c.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
c.Width = myMax;
}
当然,当您添加/更新/删除行时,您需要再次将AutoSizeColumnsMode设置为AllCellsCeptheader,然后再次执行该过程。我知道这是一个较老的问题,但我自己也遇到了,并得到了一个不错的(我想是)解决方案
' 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是预查找的宽度。您可以将prefWidth更改为所需的最大值。我的版本是
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;
}
}
private const int GridAutoResizeBoundary=100;
private const int MaxColumnWidth=300;
公共静态void AutoSizeColumns(此DataGridView DataGridView)
{
if(dataGridView.RowCount MaxColumnWidth)
列宽=MaxColumnWidth;
}
}
刚刚注意到这是一个带有vb.net答案的c#问题,对此表示抱歉。但是你应该能够翻译它。:-)翻译得很好。另请注意,在C#中,更改列宽会触发此事件。如果您不希望在设置col.Width=prefWidth
时花费额外的计算时间来检查和重新检查列,则最好在设置的代码开头包含第二个标志。我不知道这种行为在VB.net中是否相同。这改变了整个datagridview的AutoResizeMode,您不希望这样。