Winforms C#DataGridView AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells

Winforms C#DataGridView AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells,winforms,datagridview,autosize,Winforms,Datagridview,Autosize,我正在DataGridView中显示一个多达100000行的表。该表有一列包含大字符串。我发现将AutosizeMode设置为AllCells会导致应用程序在计算所需宽度时长时间冻结。 作为折衷方案,我将自动调整模式设置为DisplayedCells。 然后,我将一个方法绑定到dataGrid的滚动事件: public void MethodThatBindsDataToTheDatagridview(DataTable table) { dataGrid.Source = table;

我正在DataGridView中显示一个多达100000行的表。该表有一列包含大字符串。我发现将
AutosizeMode
设置为
AllCells
会导致应用程序在计算所需宽度时长时间冻结。 作为折衷方案,我将自动调整模式设置为DisplayedCells。 然后,我将一个方法绑定到dataGrid的滚动事件:

public void MethodThatBindsDataToTheDatagridview(DataTable table)
{
   dataGrid.Source = table;
   dataGrid.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
   dataGrid.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
}

public void DataGridScroll(object sender, ScrollEventArgs e)
{
   ((DataGridView)sender).Update();
}
我也用
Refresh
方法尝试了同样的方法。我的期望是DataGrid将根据显示的行设置列宽。但是,这只在加载表时发生一次,但滚动事件不会触发列宽度的更改。

在datagridview上调用该方法是您需要做的:

 dataGrid.AutoResizeColumn(1, DataGridViewAutoSizeColumnMode.DisplayedCells);
 dataGrid.AutoResizeColumn(2, DataGridViewAutoSizeColumnMode.DisplayedCells);

您也可以使用该方法,前提是所有列都应该使用相同的算法调整大小。这样,您的代码也适用于将来可能添加的任何列

令人惊讶的是,重载AutoResizeColumns()将使用AllCells设置调整所有列的大小,而不是根据其AutoSizeMode设置调整每个列的大小