2011-01-28 47 views
4

我在DataGridView中显示一个表格,最多有100,000行。该表有一列包含大字符串。我发现将AutosizeMode设置为'AllCells'会导致应用程序在计算所需宽度时冻结很长时间。 作为一种折衷方案,我将Autosize模式设置为DisplayedCells。 我然后绑定的方法来DataGrid的滚动事件:C#DataGridView AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells

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

pubic void DataGridScroll(object sender, ScrollEventArgs e) 
{ 
    ((DataGridView)sender).Update(); 
} 

我也试图与刷新方法相同。我的期望是,DataGrid将根据显示的行设置列宽。但是,这只会在表格加载时发生,但滚动事件不会触发列宽度的更改。

回答

5

呼吁DataGridView中​​方法是你需要做什么:

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

问题解决。谢谢。 – Yoav 2011-01-28 16:52:34

0

你也可以使用的方法AutoResizeColumns(DataGridViewAutoSizeColumnsMode autoSizeColumnsMode),前提是所有的列应该使用相同的算法来调整。这样,您的代码也适用于将来可能添加的任何列。令人惊讶的是,重载AutoResizeColumns()将使用设置AllCells调整所有列的大小,而不是根据其AutoSizeMode设置调整每列的大小。