Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175

Как выделить несколько строк в DbGrid-е, используя multiselect?

17.02.2016, 13:31. Показов 9266. Ответов 21

Студворк — интернет-сервис помощи студентам
Есть dbgrid подключённый к adoquery, в нём лежит запрос за выборку. Хотел сделать поиск, с использованием мультиселекта. Т.е. искать запись и подсвечивать поля с совпадениями. Мышкой можно выделять сколько угодно строк, а как выделять программно?
На скрине выделял мышкой.
Миниатюры
Как выделить несколько строк в DbGrid-е, используя multiselect?  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2016, 13:31
Ответы с готовыми решениями:

Как выделить (выбрать) несколько строк (в Excel) используя относительные координаты?
Вроде-бы вопрос элементарный, но нигде не могу найти. Как выделить (выбрать) несколько строк (в Excel) используя относительные...

Как выделить несколько записей из DBGrid через ctrl или shift
Как выделить несколько записей из DBGrid через ctrl или shift и сформировать отчет по выбранным записям для Fastreport с++ Rad studio 10.2 ...

Как в StringGrid выделить несколько строк?!!!
Как в StringGrid выделить несколько строк?!!!! Строки, которые выделяться будут копироваться в дальнейшем в другой компонент. Думаю,...

21
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 3
17.02.2016, 13:45
именно так вы с помощью запроса не сделаете
запрос именно ОТБИРАЕТ записи подходящие по параметрам

если хотите строки выделять то надо по тексту искать и перерисовывать
1
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
17.02.2016, 13:51  [ТС]
qwertehok, Почему же? Я могу по уже сформированной выборке перемещаться методом locate по id запроса.
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
17.02.2016, 13:54
а разве грид не bookmark'и собирает ?
0
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 3
17.02.2016, 13:56
вы спросили
Цитата Сообщение от maybeTM Посмотреть сообщение
а как выделять программно?
я написал - перерисовывать dbgrid

что вам не устраивает?
0
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
17.02.2016, 14:06  [ТС]
qwertehok, Я еще не умею перерисовывать , поэтому не особо представляю как это реализовать.
0
5989 / 4564 / 1096
Регистрация: 29.08.2013
Сообщений: 28,207
Записей в блоге: 3
17.02.2016, 14:11
maybeTM, тогда делайте запросом и все
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
17.02.2016, 14:19
в справке написано, что это TBookmarkList
добавляйте к нему bookmark для нужных строк
потом, думаю, стоит сделать Grid.Invalidate;
1
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
17.02.2016, 14:53  [ТС]
krapotkin, интересно. Т.Е получается мне для начала нужно найти запись в запросе тем же locate, потом создать закладку и засунуть её в tbookmarklist? А как потом все эти закладки установить ?Я знаю, как вернуться на одну закладку. А если пробовать загружать по очереди две закладки, то вторая будет перекрывать первую или они будут работать вместе при включённом мультиселекте?
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
17.02.2016, 15:02
Цитата Сообщение от maybeTM Посмотреть сообщение
потом создать закладку и засунуть её в tbookmarklist?
Не в tbookmarklist, а в SelectedRows
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
17.02.2016, 15:12
maybeTM,
ну да
а что такое "установить"
на закладку можно перейти если очень хочется
0
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
17.02.2016, 15:25  [ТС]
krapotkin, ну, я и имел ввиду перейти на закладку)
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
17.02.2016, 15:27
ну так в один момент времени - одна закладка, в этом принцип датасета
0
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
17.02.2016, 16:13  [ТС]
krapotkin,Ну вообще я понял, что использовать мультиселект так как я хотел его использовать нельзя и надо пытаться перекрашивать строчки грида тогда..
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
17.02.2016, 20:55
я наоборот. не понял
в чем разница?
что мышью потыкать, что программно добавить
0
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
18.02.2016, 11:26  [ТС]
krapotkin, Ну я пытался загрузить вкладки в датасет при включённом мультиселекте, запись выделялась только одна. Т.е выделялась только последняя закладка. Ну, и я видимо не очень понял тогда, как и сейчас, как выделить несколько записей, имя на руках закладки. Попытался сделать похожее выделение записи с помощью канваса. Посмотрел как это выглядит и понял, что выделять целые строки не лучшая идея.
В итоге решил во время поиска подсвечивать только нужные клетки.
Получилось красиво, то что мне нужно. Но оставалось еще изменить цвет выделенной строки.
Я тоже нашёл как это реализовать. Но получается так, что текстовые поля смещаются чуть выше. Пока что не знаю как это пофиксить.
0
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
18.02.2016, 11:32  [ТС]
Вот так примерно выглядит вариант с поочерёдным выделением ячеек.
Второй вариант с перерисовкой текущей записи. Не очень пока, что понимаю как сделать так, что бы текст перерисовывался там где надо)
Получается, что цифры на месте а буквы скачут.
Код отрисовки выделенной строки
Delphi
1
2
3
4
5
6
7
8
9
10
   if gdSelected in State then
   with (Sender as TDBGrid).Canvas do
   begin
     Brush.Color := clPaleGreen;
     FillRect(Rect);
     if Column.Alignment = taRightJustify then
        TextOut(Rect.Right - 3 - TextWidth(Column.Field.Text),
        Rect.Top - -15 - TextHeight(Column.Field.Text), Column.Field.Text)
     else
     TextOut(Rect.Left + 3, Rect.Top + 1 , Column.Field.text);
Миниатюры
Как выделить несколько строк в DbGrid-е, используя multiselect?   Как выделить несколько строк в DbGrid-е, используя multiselect?  
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
18.02.2016, 13:33
а что, просто invalidate не катит?
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
18.02.2016, 13:51
Лучший ответ Сообщение было отмечено maybeTM как решение

Решение

вот ведь заставят сделать тестовый проект на пустом месте
Delphi
1
2
3
4
5
6
7
q1.First;
  while not q1.Eof do
  begin
    if Random(100)>70 then
      dbg1.SelectedRows.CurrentRowSelected:=true;
    q1.Next;
  end;
все само красится в лучшем виде
Миниатюры
Как выделить несколько строк в DbGrid-е, используя multiselect?  
1
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
18.02.2016, 15:02  [ТС]
krapotkin, ну я же говорил, что я не очень понял как использовать мультиселект для этой задачи. Да и в итоге это оказалось немного не тем, что мне нужно.
Спасибо за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2016, 15:02
Помогаю со студенческими работами здесь

Как из edit заполнить несколько строк dbgrid
Добрый день! Подскажите пожалуйста. Выделяю с помощью MultiSelect несколько строк в dbgrid и с помощью правой кнопкой мыши вызываю...

Как используя stringstream считать несколько строк?
Мне нужно считать с помощью stringstream данные такого формата: вводится количество строк, потом в каждой строке сначала название страны, а...

Listbox multiselect как выводит несколько значений в один textbox
здравствуйте подскажите как сделать чтобы при выборе нескольких значений в listbox они вывелись все в одно поле textbox заранее...

Как разбить длинную строку заголовка на несколько строк используя CSS
Приветствую уважаемых знатоков! Только начал изучать HTML и CSS поэтому не взыщите за нубские вопросы.:) В общем-то весь вопрос в...

ListView - выделить несколько строк мышкой
Как в ListView сделать так, чтобы пользователь мог выделять несколько строк мышкой: выделяет строку, не отпуская тащит вниз и строки...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru