C#DataGridView AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells

时间:2011-01-28 10:57:03

标签: winforms datagridview autosize

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

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