在datagridview中将某些行设置为粗体时,性能较慢

本文关键字:性能 设置 datagridview | 更新日期: 2023-09-27 18:07:17

我试图使一些行在一个datagridview粗体。这将在datagridview的绑定完成时应用。

Font bold = new System.Drawing.Font(this.GridView.Font, FontStyle.Bold);
foreach (DataGridViewRow row in this.GridView.Rows)
{
    FlattenedResult item = row.DataBoundItem as FlattenedResult;
    if(item != null)
    {
        if(item.ParentID.Equals(item.ID))
        {
            row.DefaultCellStyle.Font = bold;
         }
     }
 }

问题是此操作需要超过9分钟(仅用于1000行…)。有没有更好的办法?

谢谢!

在datagridview中将某些行设置为粗体时,性能较慢

我曾经做过和你一样的事情,完成10行需要0.050秒。

根据Windows窗体DataGridView控件中的单元格样式,行/单元格Style属性每次调用getter时都实例化一个新的DataGridViewCellStyle(你所做的是能够设置Font属性)。

创建一个新的DataGridViewCellStyle只会使我的性能提高十倍。对于下面这段代码,完成时间为0.005秒。

private void dataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    DataGridViewCellStyle style = new DataGridViewCellStyle(this.DataGridView.RowsDefaultCellStyle);
    style.Font = new System.Drawing.Font(this.DataGridView.Font, FontStyle.Bold);
    foreach (DataGridViewRow row in this.DataGridView.Rows)
    {
        FlattenedResult item = row.DataBoundItem as FlattenedResult;
        if (item != null)
        {
            if (item.ParentID.Equals(item.ID))
                row.DefaultCellStyle = style;
        }
    }
}

您也可以使用e.ListChangedType属性来过滤DataBindingComplete类型。

这可能不是更好的解决方案,但我希望它能帮助找到它。

你也可以看看共享行,但它似乎只与无用户交互的DataGridViews工作得很好。

这个问题可能是由您的网格属性引起的。在我的例子中,我将property设置为

AutoSizeColumnsMode=AllCells

可能在单元格格式化后,列和标题单元格中的所有其他单元格都必须重新绘制以使其尺寸适合新的单元格尺寸。在我将属性值更改为默认值"None"后,网格立即被绘制。

1)使用虚拟模式dataGridView1.VirtualMode = true,建议使用Aphelion。你可以在这里看到DataGridView使用虚拟模式实时显示数据表的例子

2)用属性ShouldBeInBold准备数据源行(查找有意义的名称)。并在CellValueNeeded事件订阅者中使用。