优化DataGridViewRow visible = false

时间:2017-10-30 15:46:22

标签: winforms optimization datagridview

这可以以某种方式进行优化吗?在我相当快的机器上需要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中的代码更改为上面的代码。

编辑:这是仅为基准目的编写的代码。我的真正任务是动态隐藏/显示许多行而不绑定新的数据源。

0 个答案:

没有答案