![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| BGladiator |
|
|||
|
Unregistered |
Здравствуйте. Вот в чём проблема: есть DBGrid - в нём несколько колонок, указан некоторый DataSource откуда и берутся данные. При печати печатаются все строки этого DBGrida. Мне же нужно чтобы печатались лишь выбранные. Для этого в запросе, который использ. для этого DBGrida я добавил ещё одно поле SELECTION - соответственно и втаблицу БД откуда выбираются данные тоже пришлось добавить такое же поле, в котором ничего не содержится (' '). Теперь при нажатии пробела сделал обработчик, который заносит в это поле произвольную метку ('X').
Теперь при печати печатаются только те строки в которых поле SELECTION имеет метку ('X'). Всё бы хорошо да только вот установка этих меток (особенно для нескольких строк) происходит слишком медленно. Если кто-то знает как можно реализовать эти метки для печати проще пожалуйста подскажите. Если можно по подробнее, потому что перепробовал много вариантов - не выходит. Заранее спасибо. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
можно сделать проще через метки (включить в Options dgMultiSelect) . при нажатии на кнпку печать, пробегаем по гриду и смотрим в свойство CurrentRowSelected. если оно TRUE, то добавляем поле в список печатаемых полей. после этого останется только вывести на печать сам список. здесь есть варианты. самый, на мой взгляд, грамотный - TRxMemoryTable. формируем виртуальную таблицу и цепляем её к отчёту. более геморройные варианты - вручную формировать данные в том же QuickReport, т.е. в OnNeedData (так, кажется? давно с этим монстром не работал) добавляем записи из нашего списка. трейтий вариант: печатать через excel или даже word. там тоже всё достаточно просто - CreateOleObject и вперёд, на эту тему материалов просто море.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
З.Ы. выносить флаг печати в отдельное поле таблицы при мультиюзверном доступе - это смерть, imho
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
хотя, на крайняк, можно попробовать и с таблицей. установить Cashed Updates в TRUE, стартовать транзакцию, когда юзверь начинает формировать выборку, а после печати эту транзакцию откатывать. блокировки уйдут. блин, но там будут свои геморрои с транзакциями. не, лучше всего - метки
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| BGladiator |
|
|||
|
Unregistered |
Спасибо за ответы.
В Options dgMultiSelect у меня включён и список выводится на печать с помощью QuickReport. Но мне надо чтобы пользователь видел что он выбрал, ну типа моего 'X' в поле SELECTION. |
|||
|
||||
| BGladiator |
|
|||
|
Unregistered |
x77И ещё так как уменя небольшой опыт программирования в Delphi можешь показать отрывок текста в котором как, ты говоришь пробегаешь по гриду и смотришь свойство CurrentRowSelected.
Вот моя процедура ответсвенная за вывод напечать: procedure TLineData.aPrintExecute(Sender: TObject); Var pr:TrepLineData; begin inherited; pr:=nil; with Grd.DataSource.DataSet do try Filter := 'SELECTION ='+'''X'''; Filtered := True; pr:=TrepLineData.Create(nil); // pr.Preview; pr.PrinterSetup; pr.print; pr.free; Filtered := False; pr:=nil; except on Exception do if pr<>nil then pr.free; end; end; Заранее благодарен. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
так если запись выделена, он что, её не увидит? если непременно нужно отдельное поле, сделай CalculatedField и в OnCalcFields присваивай ему, чего надо если в гриде соответствующее поле является выделенным.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| BGladiator |
|
|||
|
Unregistered |
x77 На счёт CalculatedField можно какой нибудь примерчик, потому что когда я пролбовал такое сделать выдавалась ошибка что Dataset не находится в режиме редактирования или вставки. Когда я включал режим Edit; моя метка в поле не отображалась.
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
это потому, что calculated поля надо присваивать только и только в OnCalcFields. при этом датасет не переводится в режим редактирования и физические значения в базе не меняются. собственно, их там и нету
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
А если все Query i DataSource и соответствующие обработчики в том числе и On CalcFields у меня находятся в отдельной форме мне надо каждый раз из своей формы вызывать этот обработчик или нет. Если да то как?
Огромное спасибо тебе. Уже по чучуть начинаю разбираться. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
нет, OnCalcFields будет отрабатывать сам по себе всегда.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| BGladiator |
|
|||
|
Unregistered |
Так а как мне в этой отдельной форме где хранится мой OnCalcFields проверять выделена ли моя строка в гриде. Ответь пожалуйста.
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
попробовал - довольно проблематично
слушай, есть вариант попроще, если ты ещё здесь. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| BGladiator |
|
|||
|
Unregistered |
Спасибо тебе, итак за помощь, а то целый день мучаюсь. Какой вариант.
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
насчёт крестиков. вот такой:
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |