这可以以某种方式进行优化吗?在我相当快的机器上需要6300毫秒。
我尝试使用手工制作的DataGridViewRows并在添加到网格之前设置row.Visible = false,但是我不能使用DataSource / DataBoundItem,这也是一个重要的功能。
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
MakeMostRowsInVisible();
}
private void MakeMostRowsInVisible()
{
dataGridView1.DataSource = Enumerable.Range(0, 8000)
.Select(x => new Entity())
.ToList();
var currencyManager = (CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager.SuspendBinding();
int index = 0;
var sw = Stopwatch.StartNew();
foreach (DataGridViewRow f in dataGridView1.Rows)
{
index++;
f.Visible = (index % 8 == 0);
}
Console.WriteLine("Used time:" + sw.ElapsedMilliseconds);
currencyManager.ResumeBinding();
}
}
class Entity
{
static int counter;
public Entity()
{
Column1 = ++counter;
}
public int Column1 { get; set; }
public String Column2 { get; set; }
}
}
您需要创建一个WinForm项目并将DataGrid添加到默认的Form1。将Form1.cs中的代码更改为上面的代码。
编辑:这是仅为基准目的编写的代码。我的真正任务是动态隐藏/显示许多行而不绑定新的数据源。