Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/48: Рейтинг темы: голосов - 48, средняя оценка - 5.00
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175

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

17.02.2016, 13:31. Показов 9213. Ответов 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
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,156
Записей в блоге: 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
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
17.02.2016, 13:54
а разве грид не bookmark'и собирает ?
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,156
Записей в блоге: 3
17.02.2016, 13:56
вы спросили
Цитата Сообщение от maybeTM Посмотреть сообщение
а как выделять программно?
я написал - перерисовывать dbgrid

что вам не устраивает?
0
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
17.02.2016, 14:06  [ТС]
qwertehok, Я еще не умею перерисовывать , поэтому не особо представляю как это реализовать.
0
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,156
Записей в блоге: 3
17.02.2016, 14:11
maybeTM, тогда делайте запросом и все
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 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
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
17.02.2016, 15:02
Цитата Сообщение от maybeTM Посмотреть сообщение
потом создать закладку и засунуть её в tbookmarklist?
Не в tbookmarklist, а в SelectedRows
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
17.02.2016, 15:12
maybeTM,
ну да
а что такое "установить"
на закладку можно перейти если очень хочется
0
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
17.02.2016, 15:25  [ТС]
krapotkin, ну, я и имел ввиду перейти на закладку)
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
17.02.2016, 15:27
ну так в один момент времени - одна закладка, в этом принцип датасета
0
 Аватар для maybeTM
16 / 15 / 4
Регистрация: 30.10.2014
Сообщений: 175
17.02.2016, 16:13  [ТС]
krapotkin,Ну вообще я понял, что использовать мультиселект так как я хотел его использовать нельзя и надо пытаться перекрашивать строчки грида тогда..
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 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
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
18.02.2016, 13:33
а что, просто invalidate не катит?
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru