|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.05.2008, 19:34 | #1 |
Пользователь
Регистрация: 12.05.2008
Сообщений: 12
|
Раскрасит DBGRID
Подскажите как выделить строки с одинаковым содиржимиым допустим есть следйющие строки
1 2 2 7 8 9 5 8 Возможно ли раскрасить одинаковые строки Dbgrid в соответствующие оттенки цветов. Вот нашел такой пример пытался переработать, перебирал с помощю цыклов значения но чего не получилось кроми зацикливания и бесконечыной раскраски. Здесь мы будем использовать событие "OnDrawColumnCell". Следующий пример разукрашивает ячейки колонки "Status" когда значение НЕ равно "a". Если Вы хотите закрасить целую линию, то достаточно удалить условие "If..." (смотрите ниже) Код:
Последний раз редактировалось artemavd; 30.08.2012 в 11:40. |
15.05.2008, 15:21 | #2 |
Пользователь
Регистрация: 12.05.2008
Сообщений: 12
|
Подскажите как доработать програмуя сделал так
в результате запросов я получаю эти числа котрые надо выделить и присваеваю их переменной вариант. тоесть если есть столбец с числами 1,2,2,1,5,7,12,4 то я получу переменную "а" типа вариант и в ней я так понимаю содержаться числа 2 и 1. Как впихнуть уже известные значения ячейки которую надо красить в саму процедуру не знаю. Вторая процедура по клику кнопки создает этот вариант "а" . Код:
2. Расположить запрос внутри процедуры TForm1.DBGrid1DrawColumnCell тоже не льзя ругаеться. Ghjwtlehe получение масива одинаковых чисел, надо повесить на кокое то событие связанное с изменением содержимого DBGRid, которое наступает раньше чем его раскраска. А потом загнать полученый масив a[i]-ых в процедуру DBGrid1DrawColumnCell для раскраски этих строк. Последний раз редактировалось artemavd; 30.08.2012 в 11:41. |
15.05.2008, 15:55 | #3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Вот смотри: РАскрасит строки с двойками в зеленый цвет.
Код:
I'm learning to live...
|
15.05.2008, 23:58 | #4 |
Пользователь
Регистрация: 12.05.2008
Сообщений: 12
|
Нет не то или я чтото не догоняю. Сложность не в раскраски ячейки с номером "2", а сложность в том чтобы узнать что ячеек с номером "2" встречаеться больше чем 1 штука и тогда их раскрасить. Тоесть два столбца полученый врезультате запроса
1 Квдрат 25*25 2 Диаметр Д16 2 Диаметр Д25 (В одной поззиции только один инструмент) 17 Прям 15*123 5 Круг 14 Во 2-ой позици стоит два разных инструмента этого не может быть. значит надо выделить эти строки красным. вот и проблема узнать строки с каким значением надо выделить. Я их узнаю в результате проведения запросов, в итоге выполнения запроса через Qery, я имею столбец одинаковых (повторяющихся) значений тоесть резултат запроса таблица в данном случае только одно число 2. Если повторяющихся чисел больше то соответственно столбец содержит эти повторяющиеся числа 2 23 14 Можно тупо вывести ссобщение в Label что мол в позициях 2, 23, 14 инструмент пересикаеться что не допустимо. Либо попытаться загнать полученые числа в Form1.DBGrid1DrawColumnCell. В этой процедуре я присвоил значение переменной "а" вариант значение поля с теми числами которые надо раскрасить. Код:
procedure TForm1.DBGrid1DrawColumnCell и в цикле перебрать эти значения и раскрасить DBGRID. Последний раз редактировалось artemavd; 30.08.2012 в 11:41. |
16.05.2008, 10:03 | #5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
нужно в обработчике на DBGrid1DrawColumnCell
тупо перебирать, есть ли текущая переменная в списке дублирующихся. пишу наобум, прямо тут, будут ошибки, главное, хочу донести идёю: Код:
Изменить запрос так, чтобы в запросе уже было количество повторов - и тогда раскарашивать без всяких поисков и переборов - тупо проверяя значение поля.. |
16.05.2008, 10:53 | #6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Я бы сначала дал запрос на максимальное количество повторяющегося, отсортированный по убыванию, тогда первая же запись даст максимально количество цифр, вот ее значение и применяй в раскраске.
Цитата:
не стоит пробовать - медленно слишком
I'm learning to live...
Последний раз редактировалось Stilet; 16.05.2008 в 10:59. |
|
16.05.2008, 13:23 | #7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Stilet, не сказал, для меня это было очевидно, думал, что и все очевидно - запрос, в котором ищуются повторяющиеся записи (Query1) - НИ В КОЕМ СЛУЧАЕ не должен быть ТОТ, с которым связан DBGrid!!!!!
Это отдельный запрос. По поводу скорости работы - не спорю - это будет медленно, впрочем, очень сильно зависит от количества записей в основном гриде и особенно в query1, где повторы. Не хочет городить огород ради иллюстрации, но, думаю, что при двух-трёх повторяющихся номерах - работу Locate на глаз видно не будет. Хотя, концептуально, я полностью согласен. Цитата:
Например, список 1,2,2,2,3,5,,23,23,27 ... нужно расскрасить все 2-ки и все 23 |
|
16.05.2008, 14:23 | #8 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Серж, извини что засомневался, короче я имел ввиду примерно следующее
Предположим у меня в базе поле i char(10) Вот запрос на определение количества повторюшек: Код:
Код:
I'm learning to live...
|
17.05.2008, 11:03 | #9 |
Пользователь
Регистрация: 12.05.2008
Сообщений: 12
|
Почемуто не получаеться раскрасить ниже приведенным кодом хотя по логике вроди все верно. Раскрашивает только последние элементы масива.
Код:
---------- Serge_Bliznykov-у Спасибо код работает только надо доработать под мою конкретную ситуацию. Код красит почти нормально, только во все ячейки вводит значение DBGrid1.Canvas.TextOut(Rect.Left,Re ct.Top,Field.AsString); Как бы доработать чтобы вводилось только в столбец Позиция? Извеняюся за токие вопросы. Но просто не понимаю как работает эта процедура, что за что тут отвечает откуда береться, в какой переменной столбыы где записи перебираються...? И получаеться. <img src='http://programmersforum.ru/attachment.php?attachmentid=3838&st c=1&d=1211007573' /> Последний раз редактировалось artemavd; 07.08.2014 в 16:19. |
17.05.2008, 13:41 | #10 |
Регистрация: 17.05.2008
Сообщений: 5
|
Пример с книги
ПРЕДЛАГАЮ ПРИМЕР С КНИГИ: "Библия для программиста в среде Delphi" автор Horrific aca Фленов Михаил стр. 368
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DBGrid | Valera | Помощь студентам | 4 | 22.04.2009 16:54 |
DBGrid+DBGrid | Alex_666 | БД в Delphi | 11 | 19.06.2008 08:43 |
DBGrid | Ane4ka | БД в Delphi | 28 | 01.06.2008 10:00 |
DBGRID | Devikss | БД в Delphi | 2 | 29.05.2008 08:17 |
DBGrid | sergei64_89 | БД в Delphi | 0 | 09.05.2008 19:48 |