none
Медленно работате Visible в dataGridView RRS feed

  • Общие обсуждения

  • Добрый день.

    Столкнулся с непонятной ситуацией.

    Имется форма, на которой расположен datagridview, источник у него DataTale. При попытке скрыть в другом потоке нужные строки в datagridview, он делает это, но очень медленно (в течение 40 сек.), хотя выше в коде в основном потоке происходит почти та же операция с тем же объемом данных за 2 сек. НО!!! Если я начну выполнять в начале отладку до запуска этого метода (и прекратив ее при переходе на метод) - о чудо! - все работает в течение 2 сек., а если без отладки вообще, то 40 сек.

    Как сие можно понимать?

    public void EqualToFilter(string DataFrom,string DataTo,string ColumnsName)
        {
            try
            {
                string BufStringFind = DataFrom.ToLower();
                string BufStringGetName = "";
                int OldSize = ComponentOutputResultSql.dataGridView1.Rows.Count;
                OutputResultSql.ValueSearching.InvisibleRows = new int [OldSize];
                int i = 0;
                    while (i < OldSize - 1)
                    {
                        BufStringGetName = ComponentOutputResultSql.dataGridView1.Rows[i].Cells[ColumnsName].Value.ToString().ToLower();
                        if (BufStringGetName.IndexOf(BufStringFind) != -1)
                        {
                            CurrencyManager CurrencyManager = (CurrencyManager)ComponentOutputResultSql.BindingContext[ComponentOutputResultSql.dataGridView1.DataSource];
                            CurrencyManager.SuspendBinding();
                            ComponentOutputResultSql.Invoke(new System.Action(() => ComponentOutputResultSql.dataGridView1.Rows[i].Visible = true));
                            CurrencyManager.ResumeBinding();
                        }
                        else if (BufStringGetName.IndexOf(BufStringFind) == -1)
                        {
                            CurrencyManager CurrencyManager = (CurrencyManager)ComponentOutputResultSql.BindingContext[ComponentOutputResultSql.dataGridView1.DataSource];
                            CurrencyManager.SuspendBinding();
                            ComponentOutputResultSql.Invoke(new System.Action(() => ComponentOutputResultSql.dataGridView1.Rows[i].Visible = false));
                            CurrencyManager.ResumeBinding();
                        }
                        i++;
                    }                   
            }
            catch (Exception Error)
            {
                return;
            }
    

    19 марта 2015 г. 20:26