我在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将根据显示的行设置列宽。但是,这只在加载表时发生一次,但滚动事件不会触发列宽的更改。
答案 0 :(得分:5)
您需要在datagridview上调用AutoResizeColumn方法:
dataGrid.AutoResizeColumn(1, DataGridViewAutoSizeColumnMode.DisplayedCells);
dataGrid.AutoResizeColumn(2, DataGridViewAutoSizeColumnMode.DisplayedCells);
答案 1 :(得分:0)
您还可以使用方法AutoResizeColumns(DataGridViewAutoSizeColumnsMode autoSizeColumnsMode),前提是您应使用相同的算法调整所有列的大小。这样,您的代码也适用于您将来可能添加的任何列。
令人惊讶的是,重载AutoResizeColumns()将使用AllCells设置调整所有列的大小,而不是根据其AutoSizeMode设置调整每个列的大小。