Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Увеличить скорость загрузки данных из Access


Автор: Alexb11 19.4.2007, 14:19
Подскажите, пожалуйста.
Есть ДБ Access. Необходимо загрузить в DataGridView данные из таблицы БД. Количество строк в таблице - 159463.
Проблема такова, что очень медленно загружается фориа.
Подскажите решение. Заранее спасибо.

Автор: XavierElf 2.5.2007, 09:17
Чтобы форма не подвисала во время заполнения гриды, можешь загрузку данных в гриду сделать в отдельном потоке, только не забудь обращаться к гриде через Invoke(...)

Автор: Alexb11 2.5.2007, 14:51
Можно по подробнее. Интересно то, что под Vist'ой загрузка данных выполняется значительно быстрее.

Автор: XavierElf 3.5.2007, 11:17
Пример:
Имеем главную форму с гридой. Допустим она называется MyDataGridView.
Имеем кнопку, по нажатии на которую выгружаются данные из базы в гриду. Пусть она называется MyButton.
Тогда делаем следующее:

Код

//Обработчик нажатия на кнопку MyButton
Thread MyThread;
void MyButtonClick(object sender, EventArgs e)
{
    // Создаём новый поток, в котором будет запущен метод MyThreadProc
    Thread MyThread = new Thread(new ThreadStart(MyThreadProc);
    MyThread.Start();
}

//Метод, который будет запущен в потоке
void MyThreadProc()
{
    object [] row = new object[4];
    row[0] = "1";
    row[1] = "2";
    row[2] = "3";
    row[3] = "4";
    this.AddRow(row);
}

//
delegate void SetRowCallback(DataGridViewRow row);
void AddRow(object [] p)
{
    if (this.MyDataGridView.InvokeRequired)
    {
        SetRowCallBack d = new SetRowCallBack(AddRow);
        this.MyDataGridView.Invoke(d, new object [] { p });
    }
    else
        this.MyDataGridView.Rows.Add(p);
}

У меня работает нормально!  smile 

Автор: Alexb11 4.5.2007, 09:02
У меня выдает ошибку:
No overload for 'AddRow' matches delegate 'База1.Form1.SetRowCallback'
Почему?

Автор: XavierElf 4.5.2007, 14:01
Покажи код формы в которой объявлял делегат.

Добавлено через 4 минуты и 14 секунд
Вот если что мои исходники, которые я сделал для проверки своего кода.  smile 

Автор: Alexb11 4.5.2007, 15:15
Огромное спасибо за пример. Буду разбираться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)