4

我在 DataGridView 中显示最多 100,000 行的表。该表有一列包含大字符串。我发现设置AutosizeModeAllCells导致应用程序在计算所需宽度时冻结很长时间。作为妥协,我将 Autosize 模式设置为 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 将根据显示的行设置列宽。但是,这仅在加载表格时发生一次,但滚动事件不会触发列宽的更改。

4

2 回答 2

5

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

 dataGrid.AutoResizeColumn(1, DataGridViewAutoSizeColumnMode.DisplayedCells);
 dataGrid.AutoResizeColumn(2, DataGridViewAutoSizeColumnMode.DisplayedCells);
于 2011-01-28T12:36:16.640 回答
0

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

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

于 2012-06-25T12:44:19.207 回答