Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2012, 19:22   #1
.scu
Пользователь
 
Регистрация: 25.07.2009
Сообщений: 13
Вопрос dataGridView медленное заполнение

Подскажите пожалуйста, из-за чего может быть следующее:
Есть форма с закладками, при инициализации формы неактивная закладка, на которой расположен dataGridView( далее DGW), заполняется данными из списка вида:
private List<Client> _clients;

Код:

 public void FillClientsData(bool force)
        {
            dataClients.Rows.Clear();
            foreach (var client in _clients)
            {
                dataClients.Rows.Add(client.id.ToString(), client.title, client.contact, client.phone, client.email);
            }
            
        }
все заполняется замечательно и быстро.

Однако после того, как вкладка активная и соответственно DGW видимый, при повторной попытке обновить DGW из списка, на 790 примерно элементе начинаются тормоза, на заполнение каждого элемента уходит секунда и далее по нарастающей.

Я так понимаю, что проблема из-за отрисовки. Как ее отключить на время обновление DGW?
Как избежать данной ситуации ?

Спасибо
.scu вне форума Ответить с цитированием
Старый 17.07.2012, 19:39   #2
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

в интернете пишут так
Код:
yourDataGridView.SuspendDrawing();

// update your fields.

yourDataGridView.ResumeDrawing();

public static class ControlHelper
{
    #region Redraw Suspend/Resume
    [DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
    private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
    private const int WM_SETREDRAW = 0xB;

    public static void SuspendDrawing(this Control target)
    {
        SendMessage(target.Handle, WM_SETREDRAW, 0, 0);
    }

    public static void ResumeDrawing(this Control target) { ResumeDrawing(target, true); }
    public static void ResumeDrawing(this Control target, bool redraw)
    {
        SendMessage(target.Handle, WM_SETREDRAW, 1, 0);

        if (redraw)
        {
            target.Refresh();
        }
    }
    #endregion
}
Reskov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DataGridView и С# jonkaspar2008 C# (си шарп) 3 10.03.2012 22:47
Заполнение DataGridView из Textbox GL_LaMeR C# (си шарп) 2 31.05.2011 19:58
медленное usb Андрей К. Компьютерное железо 6 02.12.2010 06:56
DataGridView - медленное отображение avd Общие вопросы .NET 1 04.07.2010 11:22
как сделать медленное появление текста в программе? BARS1991 C++ Builder 12 15.11.2009 15:07