我正在尝试在 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。