【问题标题】:C# DataGridView AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCellsC# DataGridView AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
【发布时间】:2011-01-28 10:57:03
【问题描述】:

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

【问题讨论】:

    标签: winforms datagridview autosize


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-16
        • 1970-01-01
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多