我正在尝试在 datagridview 中以粗体显示一些行。这是在 datagridview 的绑定(bind)完成时应用的。

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

谢谢 !

最佳答案

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

根据 Cell Styles in the Windows Forms DataGridView Control ,每次调用 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。

10-07 23:08