Форум: "Начинающим";
Текущий архив: 2015.05.03;
Скачать: [xml.tar.bz2];
ВнизКак изменить результаты запроса в DbGrid? Найти похожие ветки
← →
Novicer (2014-02-13 00:59) [0]Здравствуйте мастера! Подскажите плиз возможно ли такое? Хочу сделать запрос, числовой результат отобразить в DbGrid и потом умножить например на 3 и результатом заменить пред.значение или арифм.операции можно заложить в сам запрос и отобразить уже в гриде готовый результат?
← →
Inovet © (2014-02-13 01:23) [1]Или в запрос или вычисляемое поле в Датасет, смотря что надо. В Гриде данных нет.
← →
Германн © (2014-02-13 01:41) [2]
> Inovet © (13.02.14 01:23) [1]
> В Гриде данных нет.
ТС в это не верит, хоть и соглашается. :)
А изменить результаты именно в гриде можно и еще одним способом. TField.OnGetText позволяет вывести в гриде (да и в любом DBAware компоненте) хоть чёрта, хоть с рогами, хоть без оных. Не говоря уж об утроенном результате. :)
← →
Юрий Зотов © (2014-02-13 02:06) [3]select field1 * 3 from ...
Это?
← →
Novicer (2014-02-13 12:33) [4]Спасибо за советы! Для подмены данных использовал метод отрисовки на канве описанный тут: http://delphiworld.narod.ru/base/dbgrid_possibilities.html в разделе "Как заменить данные в столбце компонента TDBGrid?" В DBGridDrawColumnCell все отлично работает, после выполнения запроса вижу в гриде измененные данные, но если кликнуть по строке с ними то происходит отрисовка старых данных и они накладываются друг на друга :( Как можно побороть,где перехватить(изменить)?
← →
Inovet © (2014-02-13 12:40) [5]> [4] Novicer (13.02.14 12:33)
Ты выбрал самый идиотский для твоего случая метод.
← →
Novicer (2014-02-13 12:48) [6]Как сделать лучше? Применить TField.OnGetText? Можно пример?
← →
Novicer (2014-02-13 13:05) [7]Попробовал сделать как написано тут: http://drkb3.narod.ru/22034.htm
Получаю ошибку при компиляции:Undeclared identifier: "TField" :(
← →
Novicer (2014-02-13 13:11) [8]И где потом вызывать указанную процедуру, в DBGrid1DrawColumnCell?
← →
Inovet © (2014-02-13 13:16) [9]> [7] Novicer (13.02.14 13:05)
> Undeclared identifier: "TField" :(
Создать поле в дизайнтайм, назначить нужному полу обработчик. Тебе точно нужен именно OnGetText? Впрочем, да... Эта... Если просто отобразить результат вычисления — вычисляемое поле или в запросе, но я уже отвечал. А этот метод надо понимать для чего использовать, возможно вместе с OnSetText.
← →
Ega23 © (2014-02-13 13:24) [10]
> Как сделать лучше?
[3]
← →
Novicer (2014-02-13 13:27) [11]Поля для грида созданы, но в Events только событие PopUpMenu
← →
Novicer (2014-02-13 13:29) [12]>Ega23 Но тогда запрос отобразит значение лишь одного поля,пусть и пересчитанное, а прописывать вместо * все поля долго...
← →
Ega23 © (2014-02-13 13:33) [13]И что? Отделяй мух от котлет.
И про MVC внимательно почитай
ru.wikipedia.org/wiki/Model-View-Controller
← →
Inovet © (2014-02-13 13:41) [14]> [11] Novicer (13.02.14 13:27)
> Поля для грида созданы
В гриде данных нет.
← →
Inovet © (2014-02-13 13:42) [15]> [12] Novicer (13.02.14 13:29)
> а прописывать вместо * все поля долго
А надо взять это в привычку.
← →
Novicer (2014-02-13 13:44) [16]Уже сам понял что для нужного Квери надо было поля добавить, там обработчик на событие OnGetText можно повесить вижу :)
← →
Ega23 © (2014-02-13 13:45) [17]
> а прописывать вместо * все поля долго...
Если ты собираешься программированием зарабатывать на жизнь, то выучи навсегда простое правило: звёздочку можно использовать только в отладочных целях, либо в конструкции count(*).
← →
Inovet © (2014-02-13 13:50) [18]> [17] Ega23 © (13.02.14 13:45)
> звёздочку можно использовать только в отладочных целях,
> либо в конструкции count(*).
и ещё в
> [3] Юрий Зотов © (13.02.14 02:06)
> select field1 * 3 from ...
← →
Inovet © (2014-02-13 13:52) [19]> [16] Novicer (13.02.14 13:44)
> там обработчик на событие OnGetText
Не ищи там, где светлее, ищи там, где лежит.
← →
Ega23 © (2014-02-13 13:53) [20]
> и ещё в
Это уже арифметический оператор, семантика другая.
← →
Novicer (2014-02-13 13:57) [21]>Ega23 На жизнь не получится, опыта маловато да и слишком конкуренция большая. Это так хобби, для души... :)
← →
Ega23 © (2014-02-13 13:58) [22]
> Это так хобби, для души... :)
Тогда - тем более.
← →
Novicer (2014-02-13 14:03) [23]То ли лыжи не едут,то ли.. Никак не соображу как с OnGetText на лету менять значения ячеек в нужной колонке данных после выполнения запроса? Или это надо в процессе делать?
← →
Германн © (2014-02-13 14:06) [24]И дернул же черт меня вылезти с этим OnGetText.
:)
← →
Anatoly Podgoretsky © (2014-02-13 14:18) [25]Ты не черт, а дьявол
← →
Ega23 © (2014-02-13 14:18) [26]
> То ли лыжи не едут,то ли.. Никак не соображу как с OnGetText
> на лету менять значения ячеек в нужной колонке данных после
> выполнения запроса? Или это надо в процессе делать?
А там тоже надо поля ручками прописывать. А для некоторых - ещё и про Case Sensitive не забывать.
← →
Novicer (2014-02-13 14:18) [27]:) Для проверки прописал на нужное поле такую строчку: if DisplayText then Text := AnsiUpperCase(Text); Просто чтобы преобразовало текст в верхний регистр после выполнения запроса, но данные в гриде не изменились почему то,так вижу как и без этой строчки(как отработает запрос) :/
← →
Novicer (2014-02-13 14:23) [28]Мдя.. Это я напутал игрался с полями, не назначил снова обработчик,потому и не было внешних изменений. Теперь на OnGetText нужного поля прописал if DisplayText then Text := AnsiUpperCase(Text); и данные после выполнения запроса уже вобще не отображает в этом поле :(
← →
Novicer (2014-02-13 14:28) [29]А вот такая замена текста работает: IF Sender.AsString="Ля-ля-ля" then Text := "Бла-бла-бла"; Вот от этого и бум плясать дальше... :)
← →
Ega23 © (2014-02-13 14:30) [30]Да, Серёга, зря ты это сделал...
← →
Novicer (2014-02-13 14:43) [31]Получилось! Все работает как надо! Всем спасибо за помощь и дружеские пинки в нужном направлении! ;)
← →
Inovet © (2014-02-13 14:48) [32]> [31] Novicer (13.02.14 14:43)
> в нужном направлении
в ненужном
← →
Novicer (2014-02-13 14:55) [33]Канва так понимаю ненужное направление :) Теперь хочу изменить цвет шрифта на красный в строке, в которой в поле "Количество" значение равно нулю . Метод с канвой работает до момента выделения строки(установки курсора), потом опять накладка. Хочу избавиться от этого эфекта используя снова событие OnGetText. Прописал на нужное поле такой обработчик:
IF Sender.AsFloat=0 then Form1.DbGrid1.Font.Color := clRed;
но при попытке компиляции получаю месагу: Undeclared identifier: "clRed"
С какого такого красный ему не нравиться непонятно? :( Попытка изменить цвет к успеху не привела... :)
← →
Novicer (2014-02-13 15:02) [34]С IF Sender.AsFloat=0 then Form1.DBGrid1.Canvas.Font.Color := clRed; та же петрушка... :(
← →
Novicer (2014-02-13 15:15) [35]Если отключить дефолтную отрисовку и самому указывать цвет строки в DBGrid1DrawColumnCell в зависимости от условий,то эффект "накладки" исчезает,но пропадает выделение строки(виден только курсор слева) и всплывают какие-то артефакты между колонками в виде вертикальных разноцветных линий на высоту строки.. :(
← →
Ega23 © (2014-02-13 15:53) [36]Нельзя сравнивать на равенство числа с плавающей запятой.
В общем виде это Abs(Value1 - Value2) <= Epsilon
где Epsilon - требуемая точность.
← →
Novicer (2014-02-13 19:52) [37]Пусть будет и Абс. Так можно или нет на OnGetText поменять цвет строки, вернее шрифта по заданному условию? Как?
← →
Германн © (2014-02-13 19:54) [38]
> Так можно или нет на OnGetText поменять цвет строки, вернее
> шрифта по заданному условию?
Нельзя.
← →
Novicer (2014-02-13 20:32) [39]Пльохо... :( с отрисовкой на канве пашет, но эффект наложения старых данных все портит, а где перехватить незнаю :(
← →
Dennis I. Komarov © (2014-02-13 23:31) [40]
> Нельзя.
Нет тебе прощения... ;)
← →
Германн © (2014-02-14 00:13) [41]
> Novicer (13.02.14 20:32) [39]
>
> Пльохо... :( с отрисовкой на канве пашет, но эффект наложения
> старых данных все портит, а где перехватить незнаю :(
>
Не перехватывать надо, а рисовать всё самому и правильно. Если уж решил изменить стандартную отрисовку DBGrid"a.
← →
Novicer (2014-02-14 00:50) [42]Если отключаю дефолтдравинг все рисует правильно, все данные в гриде отображает, но выбранная строка не выделяется, некрасиво... :(
← →
Германн © (2014-02-14 03:26) [43]
> Novicer (14.02.14 00:50) [42]
>
> Если отключаю дефолтдравинг все рисует правильно, все данные
> в гриде отображает, но выбранная строка не выделяется, некрасиво.
> .. :(
Так я же сказал рисовать надо правильно, а не как бог послал.
Читай
Разноцветный DBGrid http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168#link2
← →
Inovet © (2014-02-14 09:53) [44]> [36] Ega23 © (13.02.14 15:53)
> Нельзя сравнивать на равенство числа с плавающей запятой
к тому же с целым ещё, ну да ладно неявно преобразуется.
← →
Inovet © (2014-02-14 09:55) [45]> Разноцветный DBGrid
Или поставь EhLib, там много чего есть.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2015.05.03;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.002 c