我在DataGridView中显示的表格最多包含100,000行。该表有一列,其中包含大字符串。我发现将AutosizeMode设置为AllCells会导致应用程序冻结很长一段时间,同时它计算所需的宽度。
作为一种折衷,我将“自动调整大小”模式设置为DisplayedCells。
然后,我将一个方法绑定到dataGrid的scroll事件:

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将根据显示的行设置列宽。但是,这仅在加载表时发生一次,但是scroll事件不会触发列宽的更改。

最佳答案

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

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

10-08 05:05