|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.03.2013, 20:57 | #1 |
Пользователь
Регистрация: 16.06.2009
Сообщений: 36
|
выделение строк в ячейках которых повторяются значения в dbgrid
Помогите разобраться, уже попробовал все варианты найденные в интернете по раскрашиванию DBgrid.
В результате запроса выдается список данных, в которых дублируется, в одной ячейки записи id_|num_|__SRNR____|_______title__________| +++++++++++++++++++++++++++++++++++ +++ 01| 23 | 2356000001 | препарат1 | 02| 34 | 2356000001 | препарат1 | 03| 66 | 2356000004 | препарат3 | 04| 67 | 2356000004 | препарат3 | 05| 32 | 2356000011 | препарат56 | 06| 34 | 2356000011 | препарат56 | 07| 46 | 2356000034 | препарат87 | 08| 49 | 2356000034 | препарат87 | ------------------------------------------------- вот примерно так... вот мне нужно каждую дубль строку выделить. в идеале 1 строка остается как положено, следующая строка если есть дубль в записи выделяется цветом(к примеру желтым); Дубли проверяются по полю SRNR попробовал сделать вот так : Код:
Последний раз редактировалось silent_lab; 22.03.2013 в 21:28. |
22.03.2013, 21:42 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
При прорисовке событие отрабатывает для каждой колонке грида по каждой записи. Информации о соседних записях нет. Эта информация должна быть в каком-то поле каждой записи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
22.03.2013, 21:50 | #3 |
Пользователь
Регистрация: 16.06.2009
Сообщений: 36
|
мне просто нужно все стоки с повторами выделить.
перемененная numsrnr является проверочной ,содержит новая строка с ячейкой совпадение или нет. в примере переменная s присваиваю содержимое колонки SRNR новой строки, проверю содержимое ячейки SRNR равно оно значению numsrnr, если нет, то строка без измения цвета и numsrnr присваиваю значение s иначе поле содержит совпадение и строчку целиком нужно перекрасить. вот примерно алгоритм , но что то не так работает((( Последний раз редактировалось silent_lab; 22.03.2013 в 22:00. |
22.03.2013, 22:59 | #4 |
Форумчанин
Регистрация: 11.03.2011
Сообщений: 426
|
Не верный алгоритм, поскольку цвет строки не запоминаете. Когда грид просит отрисовать ячейку из столбца ACol из строки ARow, то именно здесь нужен цвет ячейки или шрифта. А у вас его нет...
|
22.03.2013, 23:33 | #5 |
Пользователь
Регистрация: 16.06.2009
Сообщений: 36
|
А пример можно ?
|
22.03.2013, 23:43 | #6 |
Форумчанин
Регистрация: 11.03.2011
Сообщений: 426
|
А какой пример вы хотите? Либо цвет должен определяться по какому-то полю из запроса/таблицы, либо создавать отдельное хранилище, где для каждой строки будет храниться цвет. Других вариантов вроде бы и нет...
|
23.03.2013, 11:03 | #7 |
Пользователь
Регистрация: 16.06.2009
Сообщений: 36
|
Честно сказать не пойму о чем речь идет. цвет всего один для дублированы записей, для остальных обычный.
Вопрос стоит именно как сверить повторяться ли записи, и если есть совпадение то строку окрасить в другой цвет. Запрос уже выдает строки по порядку возрастания или убывания(это как настроить). Мне же нужно при совпадении значения поля SRNR с предыдущей отрисованной уже строй закрасить ее, а если нет совпадения оставить без изменения. |
23.03.2013, 11:12 | #8 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
В момент отрисовки нет информации о предыдущей записи. Что бы ее взять нужно указатель записи датасета переместить, попробуйте переместите и все рухнет. Следствие - вся информация должна быть именно в одной записи или в каком-то левом источнике данных, к которому можно обратиться. Можно попытаться в запросе сформировать некий признак, но подозреваю, что будет куча сложностей. Самый простой и дубовый вариант - два идентичных датасета, один отображаемый, второй для анализа предыдущей записи при прорисовке.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
23.03.2013, 11:21 | #9 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
перед тем как что-то показывать для кажой записи из полученного набора данных необходимо определить является ли она дубликатом. Затем в процессе показа (OnDraw) надо воспользоваться этим знанием и раскрасить. Никаких предыдущих (последующих) строк во время раскраски не существует. Обращение к дугим записям означает переход к этой строке.
Если строки отсортированы можно было бы попробовать где-то сохранять код(текст) последней отрисованной и анализивать (сравнивать) с текущей. Да вот беда никто не может знать с какой строки начнется рисоватние и в каком порядке оно будет идти. Цитата:
Как этого добиться? Цитата:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 23.03.2013 в 11:24. |
||
23.03.2013, 11:22 | #10 |
Форумчанин
Регистрация: 11.03.2011
Сообщений: 426
|
Реализация требуемого с TDBGrid для вас будет слишком сложной. Попробуйте поискать сторонний компонент, где это уже реализовано. Если записей будет немного, то я бы вообще отказался от TDBGrid и реализовал всё через обычный TDrawGrid с отображением внешней коллекции записей, например TCollectionItems или TObjectList с вложенными TStringList. Там можно было бы и хранить цвет строки.
Последний раз редактировалось ReportCube; 23.03.2013 в 11:27. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удалить слова, в которых буквы повторяются | Artoo | Помощь студентам | 0 | 16.12.2011 22:09 |
Выделение несколько строк в DBGrid | Blood_ghosT | БД в Delphi | 6 | 05.12.2011 11:13 |
Выпадающий список, если значения в книге повторяются. | kamarella | Microsoft Office Excel | 18 | 25.08.2010 09:11 |
Вопрос про выделение строк в DBGrid | RamireZ | БД в Delphi | 0 | 03.12.2009 17:40 |
Выделение цветом нужных строк таблицы DBGrid | XFilippowX | Общие вопросы Delphi | 4 | 16.02.2009 10:02 |