4

我正在尝试在 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 行......)。有没有更好的办法 ?

谢谢 !

4

3 回答 3

2

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

根据Windows Forms DataGridView Control 中的 Cell Styles ,每次调用 getter 时,行/单元格Style属性都会实例化一个新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;
        }
    }
}

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

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

您还可以查看共享行,但它似乎只适用于无用户交互的 DataGridView。

于 2014-04-29T14:37:53.167 回答
1

问题可能是由您的网格属性引起的。就我而言,我已将属性设置为

AutoSizeColumnsMode=AllCells

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

于 2019-08-26T11:41:12.080 回答
0

1)使用虚拟模式dataGridView1.VirtualMode = true,建议远日点。您可以在此处查看示例DataGridView 使用虚拟模式实时显示数据表

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

于 2013-04-04T08:17:13.960 回答