Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > DBGridEh |
Автор: vikaz 17.1.2010, 10:31 | ||
Всем привет! решил я значит разукрасить DBGridEh, но столкнулся со сл. проблемой! 1. Сначала при создании события DBGridEh1GetCellParams, при компиляции появляется ошибка [BCC32 Error] Main_Unit.h(98): E2015 Ambiguity between 'TGridDrawState' and 'Gridseh::TGridDrawState' Full parser context Main_Unit.cpp(6): #include Main_Unit.h Main_Unit.h(44): class TMain_Form Я это дело правлю, но при каждой компиляции выводится сообщение: http://pikucha.ru/260226 Можно ли от него избавиться? 2. В событии DBGridEh1GetCellParams пишу такой код:
Компилирую все это дело и как только должно открыться главное окно, слышен звук как при ошибке, но сообщений не выводится и программа подвисает! Сначала думал, это из-за того, что сначала я руками добавляю нужные мне поля в DBGridEh, и потом делаю коннект к базе, но добавив поле при проектировании и написав запрос для вывода строк, заново откомпилировал, Ничего не изменилось: звук и зависание программы. поправил код, оставил только Background = clGray; Так все прокатило, все строчки у меня закрасились нужным цветом. Отсюда сделал вывод, что ошибка возникает, как только пытаюсь работать с полями... :( Но надо чтобы все заработало! Прошу помощи! |
Автор: vikaz 17.1.2010, 11:13 | ||
вторая проблема была успешна решена! Дело оказалось в том что нельзя делать вот так:
т.е. если создается поле, оно должно быть ОБЯЗАТЕЛЬНО связанно с полем в таблице. Иначе...... Осталось по первому вопросу решить, а то уже достало это сообщение!!! ![]() |
Автор: _Dimon_ 17.1.2010, 11:49 | ||||
Как правите? Если эта функция будет написана в *.h файле
и в *.cpp файле
то будет все нормально. А почему вы не везде пользуетесь DBGridEh? Я бы заменил все DBGrid на DBGridEh и тогда и проблемы этой не будет... |
Автор: vikaz 17.1.2010, 12:05 | ||||||||
конструктор создает в h и cpp файле сл. код: h
CPP
Я правлю его на: h
CPP
Я везде использую DBGridEh! Интересно, а с чего Вы решили, что я использую и просто и Eh? ![]() |
Автор: vikaz 17.1.2010, 17:18 |
В Grid выводятся различные значения, часть значений имеет специфичное значение (0 или 1, или еще какие-то, не суть важно), как визуально подменить значение, т.е. как сделать так, чтобы вместо 1 выводилось ОК, вместо 0 - Ошибка? Добавлено через 1 минуту и 52 секунды зы: в *.h есть: #include "DBGridEh.hpp" #include "GridsEh.hpp" |
Автор: vikaz 17.1.2010, 19:24 |
Нашел на одном сайте вот такое хитрое решение: Чтоб работало и компилятор не ругался нужно изменить имя TGridDrawState на любое другое (напр. TGridDrawStateee) в файлах (можно открыть в блокноте и выбрать заменить все) Include\Vcl\grids.hpp Include\Vcl\dbgrids.hpp Source\vcl\grids.pas Source\vcl\dbgrids.pas и все стало работать как часы 8-) Это для старой компоненты! Я же просто нашел все hpp и pas файлы, где есть TGridDrawState и сделал вышеописанную замену - ВРОДЕ ВСЕ РАБОТАЕТ! ![]() |
Автор: vikaz 17.1.2010, 20:31 | ||||||||||
Как обработать TField->OnGetText в DBGridEh? (Решён!!!) Один из способов подменить текст в DBGrid на нужный - использовать событие OnGetText. У Всех источников для работы с БД (Query, Table ...) есть свойство Filelds, который позволяет задавать определенные поля. У каждого такого поля, есть событие OnGetText, который позволяет изменять текст именно в этом поле. для изменения значения пишет сл. код:
После этого кода в поле Status все числовые значения будут заменены на текстовые. Для того, чтобы подменять значения в динамически изменяемых полях, нужно: 1. в *.h файле создать обработчик, а в *.cpp файле его описать (пример): *.h файл
*.cpp файл
2. Связать определенное поле с функцией UniQuery_GetText Тут надо быть аккуратнее, нужно связать поле с UniQuery_GetText только после того, как поле будет создано и данные появятся в DbGrid. Иначе можно словить AV. пример:
|