11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 667
|
|||||||||||
1 | |||||||||||
DatagridView тормозит при загрузке данных27.12.2016, 16:57. Показов 6224. Ответов 15
Метки нет (Все метки)
Запрос получает данные быстро. а вот забрасывает данные в таблицу долго:
0
|
27.12.2016, 16:57 | |
Ответы с готовыми решениями:
15
При загрузке формы не выводятся значения из таблицы в dataGridView Ошибка при обновлении данных в БД из DataGridView при определенном условии Ошибка при загрузке данный в DGV (Нулевой индекс не содержит данных) Тормозит или плывет dataGridView |
17685 / 12871 / 3365
Регистрация: 17.09.2011
Сообщений: 21,136
|
|
27.12.2016, 18:07 | 2 |
Используйте DGV в виртуальном режиме.
Заполнять ячейки придется вручную по запросу, но работать будет во много раз быстрее, т.к. отрисовываться будут только видимые записи.
0
|
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 667
|
|
28.12.2016, 14:06 [ТС] | 3 |
Немогу понять как он реализовывается. Мне кажется что он не подойдет. При каждом запросе приходят новые данные. Запрос динамический. т.е. каждый раз разное количество столбцов и разные данные. Насколько я понял он один раз загрузит и потом при определенных параметрах он будет отбирать и отображать которые подходят под условие?
0
|
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
|
|
28.12.2016, 14:33 | 4 |
Заполнять ячейки вручную не стоит. Почему DataSource DGV устанавливается в другом месте? Покажите весь код связывания.
0
|
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 667
|
||||||
28.12.2016, 15:02 [ТС] | 5 | |||||
Метод вызывается при нажатии на кнопку "Отобразить"
0
|
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
|
||||||
28.12.2016, 15:41 | 6 | |||||
Дело в строках:
Вы хотите вставить фильтр, так вставляйте его либо в BindingSource или в DataTable. У Вас связка: DataTable - BindingSource - DataGridView. DataGridView - только для отображения нужного. DataTable - для хранения всех данных. BindingSource - посредник между DataTable и DataGridView - в нем (или DataTable) фильтруем то, что будет отображаться.
0
|
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 667
|
|
28.12.2016, 16:10 [ТС] | 7 |
всё быстро отрабатывает. В дебаге проверил что тормозит из-за dataGridView1.DataSource = _bindingSource;
Как я понимаю в этом дело, или я ошибаюсь? Добавлено через 9 минут даже когда я убрал фильтрацию - время выполнения не изменилось, т.е. не в этом дело. и если вы посмотрите внимательно код, то видно что сдесь 3 случая: когда не требуется фильтровать, когда фильтруется по selsovet и по country. Заметил что при первом запросе, время выполнения долгое, но при следующих, время выполнения заметно сокращается.
0
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|
28.12.2016, 16:38 | 8 |
Vla00, а на DGV случайно не навешено обработчиков событий изменений? Просто я ни разу не встречал тормозов при биндинге данных в таблицу.
1
|
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
|
|||||||||||
28.12.2016, 16:46 | 9 | ||||||||||
Верно, тормозит из-за dataGridView1.DataSource = _bindingSource;
Итак, все нужные Вам данные лежать в dataSet.Tables[0] и поэтому запишем для связывания:
0
|
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 667
|
||||||
29.12.2016, 08:22 [ТС] | 10 | |||||
На нем повешен только один обработчик, при нажатии на строку открывается форма для редактирования данных. Но это не относится к этому.
Добавлено через 14 минут Написал вот так, на полторы секунды работает быстрее, но всё равно для 300 записей, 8-8,5 сек. долго я считаю.
0
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|
29.12.2016, 08:47 | 11 |
Vla00, ты с таблицей что-то делаешь из DGV?
Можно попробовать биндить не Table[0], а коллекцию классов-обёртёк. Например, для таблицы с полями id, Name, Phone создаётся класс, содержащий свойства string Id, Name, Phone. Коллекция заполняется данными из таблицы и биндится к контролу.
1
|
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
|
|
29.12.2016, 09:20 | 12 |
Покажите, 1) какое значение request Вы передаете в метод UpdateDateGrid(string request),
2) какое значение command Вы передаете в SqlDataAdapter(command, _connection);
0
|
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 667
|
||||||
03.01.2017, 09:21 [ТС] | 13 | |||||
Добавлено через 1 час 6 минут Хотел сделать так как вы сказали, но не получилось. Не могли бы вы скинуть пример или примерно набросать код? Буду очень благодарен...
0
|
784 / 615 / 273
Регистрация: 04.08.2015
Сообщений: 1,707
|
|
03.01.2017, 13:18 | 14 |
Сортировка по неиндексированному полю может существенно увеличить время выполнения запроса.
0
|
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
|
|
03.01.2017, 17:08 | 15 |
Посоветовать могу только одно: оптимизируйте запрос к БД (или ее таблицы). Для проверки сделайте простой запрос с выборкой и закачайте данные в DataSet с воспроизведением в DataGridView. Все будет быстро.
0
|
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 667
|
|||||||||||
04.01.2017, 15:20 [ТС] | 16 | ||||||||||
Пробовал создавать индекс и убирал сортировку, время выполнения одинаковое.
Добавлено через 1 минуту Дело в том что если первый раз обращаться по данному запросу, то запрос выполняется долго. При дальнейших обращениях - быстро. Если даже закрыть форму и открыть заново и выполнить запрос, всё же долго.... Добавлено через 1 минуту Как я писал выше время выполнения занимает долго из-за занесения данных в DataSource. Добавлено через 4 часа 4 минуты Разобрался в чем дело.... Оказалось что нужно было просто убрать:
Добавлено через 19 секунд Разобрался в чем дело.... Оказалось что нужно было просто убрать:
3
|
04.01.2017, 15:20 | |
04.01.2017, 15:20 | |
Помогаю со студенческими работами здесь
16
Ошибка при добавлении данных в datagridview Ошибка при редактировании данных через DataGridView Обновить DataGridView при внесении данных через форму Ввод данных в БД MS Access при помощи компонента DataGridView Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |