【问题标题】:Changing the width of all columns in a DataGridView更改 DataGridView 中所有列的宽度
【发布时间】:2011-07-06 13:38:53
【问题描述】:

我们有一个包含 2048 列的 DataGridView。我们必须为用户提供一种方法来增加和减少 DataGridView 中所有列的宽度。

目前,我们在按钮单击处理程序中执行以下操作:

for (int i = 0; i < dgv.Columns.Count; i++)
{
   dgv.Columns[i].Width += 5;
}

但这需要一段时间! (更具体地说,大约 2 秒)。 (注意:我们将 ColumnHeadersHeightSizeMode 属性设置为 DataGridViewColumnHeadersHeightSizeMode.DisableResizing 以获得一些性能,但这并没有削减它)

有没有更快的方法来实现列的大小调整?

【问题讨论】:

  • 2048 列?你可以重新考虑那个 ui 吗?
  • 我希望可以。我确实需要 2048 列(== 我的客户说他需要它)。不过,我愿意接受有关其他实现该功能的方法的建议。也许 dataGridView 不是最好的方法。
  • 看看这篇文章:stackoverflow.com/questions/587508/… 不确定它是否能解决你的问题,但那里的想法可能会有所帮助,尤其是双缓冲。

标签: performance datagridview datagridviewcolumn


【解决方案1】:

您可以尝试为每列的按钮单击附加一个单独的事件,如下所示:

for (int i = 0; i < 500; i++)
{
    DataGridViewTextBoxColumn c = new DataGridViewTextBoxColumn();
    dataGridView1.Columns.Add(c);

    button1.Click += (o, e) => {                    
        c.Width = 10;                    
    };
}

我凭直觉尝试了这个,它看起来很有效。我不确定是否有任何副作用,是否有更好的方法,甚至是否适用于不平凡的示例 - 我的所有列都是空的且未绑定。

【讨论】:

  • 这行得通,但需要的时间与我们的代码相同。当我们单击按钮时,事件处理程序被调用了 2048 次,这花费了大约相同的时间。
  • 此外,在第一次初始化网格时,在列生成循环中创建事件处理程序需要很多时间:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 2012-08-09
  • 2017-12-09
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
相关资源
最近更新 更多