С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
10 / 10 / 7
Регистрация: 17.05.2009
Сообщений: 140

Как лучше оптимизировать работу с данными БД

13.01.2014, 11:05. Показов 1146. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
У меня в приложении есть функция работы с адресами из Кладр. Выглядит это как на скриншоте.
Первоначально я хотел по событию textBox_TextChanged обращаться к бд (mysql) и в соответствии с введенными символами заполнять datagrid, но тут столкнулся с проблемой под тормаживания приложения из-за постоянной подгрузки данных.
Для уменьшения количества данных - сделал уточняющие запросы, т.е. если выбран регион - то список районов загружаются только из этого региона и т.д. Но этого не хватает скажем для г. Москвы
Затем я решил сделать при загрузке формы заполнение грида и уже производить поиск внутри него. Но тут тоже проблема есть - если производить поиск улиц по г. Москва, то необходимо первоначально загрузить около 4000 названий улиц. Грид получится великоват.

Как лучше сделать поиск данных и их обработку из БД?
Миниатюры
Как лучше оптимизировать работу с данными БД  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2014, 11:05
Ответы с готовыми решениями:

Как лучше организовать работу Access с данными из разных файлов Excel
Задача в следующем. В базе Access есть список путей до типовых файлов Excel, откуда нужно взять данные. Связывание БД с этими...

Как лучше оптимизировать переменные
Код dll внедряемый в игру вызывается много раз в секунду ( от 100 до 2000+ ) в зависимости от мощности пк. Соответственно я как ноль в си,...

Как лучше оптимизировать условие
Из edit мы отправляем текст который обрабатывается begin if (Edit1.Text='Выключайся') or (Edit1.Text='Off') then Close; end; ...

7
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
13.01.2014, 12:34
дёргать бд при каждом новом символе совсем не хорошо. В гриде нужно показывать только то, что видет на данный момент юзер, если ему нужно видеть больше, он скроллит, данные подгружаются. Для этого у грида есть св-во VirtualMode
0
10 / 10 / 7
Регистрация: 17.05.2009
Сообщений: 140
13.01.2014, 13:12  [ТС]
Монфрид, Судя по всему это то, что нужно. Не могли бы подсказать как заполнить данными грид используя данный режим?
И еще как производить поиск по такому гриду? Если я правильно суть уловил, данные не хранятся в гриде а подгружаются по мере прорисовки (прокрутки скорола) ячеек. Как тут поиск организовать?
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
13.01.2014, 13:46
skynet80, я немножко соврал, написав что данные в этом режиме, при прокрутке должны подгружаться из бд. Сначала все необходимые выгружаются в какую то коллекцию, а грид уже берёт необходимое из неё, а не из бд.
вам нужно поставить virtualMode в true, потом подписаться на событие CellValueNeeded у грида:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void gcMultiRow1_CellValueNeeded(object sender, CellValueEventArgs e)
        {
            Student student = null;
            if (e.RowIndex == userData.Count)
            {
                student = uncommitNewStudent;
            }
            else
            {
                student = userData[e.RowIndex];
            }
 
            // When MultiRow paints a cell, the control gets the value of the specific cell with this event.
            if (e.CellName == "Name")
            {
                e.Value = student.Name;
            }
            if (e.CellName == "Mathematics")
            {
                e.Value = student.MathematicsScore;
            }
            if (e.CellName == "Philosophy")
            {
                e.Value = student.PhilosophyScore;
            }
            if (e.CellName == "ID")
            {
                e.Value = student.ID;
            }
        }
e.CellName - это название столбца. Пример не мой, но делается это примерно так. userData - соответственно коллекция, содержащая данные из бд

Добавлено через 1 минуту
а вот тут, как я понимаю как раз вариант в подгрузкой данных из бд
0
10 / 10 / 7
Регистрация: 17.05.2009
Сообщений: 140
13.01.2014, 14:46  [ТС]
Тут я более менее разобрался. Но пока не могу понять кок произвести поиск в гриде.
допустим грид на данный момент отображает столбец со строками:
1
2
3

смогу ли найти программно строку содержащую 4, которая не отображается в этом гриде? и вообще как ее найти?

Нашел другой пример http://msdn.microsoft.com/ru-r... .110).aspx
и что-то не пойму как он должен работать. у меня данные подгружаются только когда я в последнюю строку начинаю водить символы. тогда начинают подгружать символы. Я надеялся на другое.
0
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
13.01.2014, 15:23
Цитата Сообщение от skynet80 Посмотреть сообщение
смогу ли найти программно строку содержащую 4, которая не отображается в этом гриде? и вообще как ее найти?
вам искать надо не в гриде, а в том массиве, куда вы выгрузили данные
0
0 / 0 / 1
Регистрация: 12.01.2014
Сообщений: 33
14.01.2014, 05:05
Я решаю такие задачи таким образом...
Запускаю приложение. По какому либо событию запускаю в отдельном потоке загрузку данных в DataTable при этом отображаю признак(крутиться что-то или прогрессбар) что поток еще не отработал и блокирую допустим комбобокс. После загрузки данных с помощью Linq запроса выдергиваю данные из таблицы потом только гружу в грид.

Добавлено через 3 минуты
C#
1
2
3
4
DataTable dt = FrmMain.DataProfiles;
                name = (from row in dt.AsEnumerable()
                        where row.Field<int>("id_sys") == Convert.ToInt32(id)
                        select row.Field<string>("name")).Single();
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
14.01.2014, 07:31
4000 записей с одним полем загрузить для вас затратно? Что-то совсем слабовато.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.01.2014, 07:31
Помогаю со студенческими работами здесь

Как ощутимо оптимизировать работу Windows 10 ?
Как ощутимо оптимизировать Win 10 ? желательно кроме программ

Как оптимизировать работу с несколькими DataGridView?
Есть форма с несколькими DataGridView (отсюда https://www.cyberforum.ru/csharp-net/thread228350.html). По клику в заголовке нужно...

Как ощутимо оптимизировать работу windows 7?
Как ощутимо оптимизировать вин7

Как оптимизировать работу с большими массивами изображений
Добрый вечер. Хотел бы получить небольшую консультацию. В процессе работы приложения, необходимо работать с множеством массивов(например...

Как оптимизировать работу программы визуализации графов?
В общем, программа должна генерировать граф и визуализировать его, всё работает, но если вводить число вершин больше 30, то генерируется и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru