Баг репорт №3!

отредактировано 11:43 Раздел: FastReport .NET
Проблема:
не обрабатываются события в дочерних отчётах

Моделирование:
1. создаем детальный отчет, размещаем в отчете 2 объекта, не важно где (например в заголовке отчёта), я в виде примера использовал textbox и checkbox
2. заходим в его события (там же где параметры), выбираем событие Click жмем по нему 2 раза, открывается код и создается процедура привязанное к этому событию
private void CheckBox1_Click(object sender, EventArgs e)
внутри процедуры пишет MessageBox.Show("test");
проделываем тоже самое с checkbox'ом

(надо не забыть еще создать параметр в детальном отчёте, иначе нельзя будет его зацепить за главный отчет)

жмем Ctrl-P, нажимаем на checkbox, textbox, всё замечательно, выскакивает сообщение "test"

сохраняемся выходим

2.создаем отчёт (master) и создаем в нём textbox, к этому полю прикручиваем hyperlink на "Детальный отчёт", в параметрах указываем отчет и всё прочее (не проблему не влияет)

запускает отчет, кликаем по нашей ссылке, открывается в TAB'е детальный отчет, в котором мы ранее создали 2 объекта и привязали к ним события. жмем на объекты... событие Click не обрабатывается

пока всё :)

Комментарии

  • отредактировано 11:43
    Если нужна обработка событий preview в детальном отчете, так сделать не получится - архитектурные ограничения. Надо поместить детальный отчет на отдельной странице в основном отчете и использовать тип гиперссылки - "Детальная страница".
  • отредактировано 11:43
    к примеру из мастер отчёта я вызвал 2 страницу 4 раза с разным параметром. все они отрисованы
    но событие у них у всех общее и параметры общие, тут подкрадывается косяк
    то есть события из 1 копии страницы номер 2, влияют на 2 копию страницы номер 2... так что такой вариант еще хуже :)
    что то можете еще посоветовать?
    может быть как то можно вызывать событие непосредственно в frPreview классе, тогда это можно будет реализовать программным путём уровнем выше.
    в чём вообще трабл?
  • отредактировано 11:43
    Что значит
    написал:
    то есть события из 1 копии страницы номер 2, влияют на 2 копию страницы номер 2...
    можете продемонстрировать на примере?
  • отредактировано November 2009
    конечно
    но тут особо и смотреть не на что, все старницы работают в одном адресном пространстве и имеют общие параметры, переменные и так далее.
    то есть, если я вызываю страницу №2 (по гиперссылке) и передаю в неё параметр 1, параметр измениться и страница будет сформирована
    далее, если я открою 2 гиперссылку с этой странице и передам туда параметр 2, в предыдущей вкладке (которую я открыл по пред. гиперссылке) этот параметр тоже станет 2.
    то есть я не могу в случаи необходимости переформировать эту страницу правильно. её обновление приведет к тому, что я получу страницу с параметром 2, а не параметром 1 (который я ей передавал)

    то есть в результате имеет 3 вкладки, мастер отчёт и 2 страницу в 2 видах, если я вызову событие во 2 табе и изменю какие то параметры, потом его перерисую то сформируется то он с теми параметрами которые я передал в 3.

    в 1 же варианте, всё передается правильно, то есть каждая таб это отдельный отчет, у него свои параметры и переменные и я могу управлять им независимо. но события не обрабатываться... почему то. ...
    2 файлом привожу пример 1 поста.

    в 1 примере кликаем на ссылку 1 и ссылку 2, затем переключаемся во вкладку №2 и видим, что там параметр будет 2..

  • отредактировано November 2009
    не сохранил отчёт и теперь не могу его залить, не сохраняется :) места не хватает)... приеду домой кину ссылку на него
  • отредактировано 11:43
    Вот этот момент не понятен:
    написал:
    то есть я не могу в случаи необходимости переформировать эту страницу правильно. её обновление приведет к тому, что я получу страницу с параметром 2, а не параметром 1 (который я ей передавал)
    Как Вы собираетесь ее переформировать? Кнопки Refresh нет. Из кода можно вызвать page.Refresh() - такой прием используется кое-где в примерах, но он будет работать корректно, т.к. перестроения отчета не вызывает.

    Что касается примеров в аттаче - это я уже говорил, с типом ссылки "Детальный отчет" события превью не работают. Здесь есть ограничение: один Preview = один Report + один или несколько готовых отчетов (PreparedPages). Т.к. Report один, то и скрипт тоже один.
  • отредактировано November 2009
    хм, вопрос довольно интересный
    при вызове Refresh у меня выполняется событие ReportStart (в моём отчёте), в отчете данные берутся из sql базы и оснавная часть полей обрабатывается в процедурах.
    после чего все данные выводят в бенд из коллекций и массивов. довольно замароченная фигня, передать её вам не получится, так как она тесна связана с моей AD и базой данных.
    когда происходит событие на checkbox'е в фильтр бенда данные добавляются новое условие (или удаляется) и я делаю Refresh, отчёт обновляется.

    у меня такой вопрос, можно ли как то событие объекта checkbox или к примеру textbox, передать в код уровнем выше, то есть в программу в которой находиться объект Preview?
    это решило бы все проблемы. так как я пока не понял, как организоваться обратную связь.
    проше говоря при клике на Textbox выполняется событие textbox1_click в коде самого фастрепорта, внутри этого события я бы вызывал событие Preview контрола, которое перехватывалось бы в VS?
    было бы супер круто и мне кажется, это не так сложно реализовать.
    хотя бы функцией (главное, чтобы можно было передать аргументы в событие)

    вариант со страницами вообще не подходит для реализации таких задач.

    я понимаю, что много хочу.. но возможно ли такое?

    P.S. завтра с работы попробую закинуть то, что не получилось вечером сегодня :)
  • отредактировано 11:43
    написал:
    у меня такой вопрос, можно ли как то событие объекта checkbox или к примеру textbox, передать в код уровнем выше, то есть в программу в которой находиться объект Preview?

    Теоретически можно, вызвав нужную ф-ю из скрипта Click. Только в вашем случае это не сработает. Причину я объяснял выше - события preview не работают в детальных отчетах.
    написал:
    вариант со страницами вообще не подходит для реализации таких задач.

    Боюсь, что других вариантов просто нет.
  • отредактировано 11:43
    а что на счет перехвата событий снаружи? передавать их объекту Preview, sender будет объект инициировавший это событие, e будет аргумент который я туда передал. у отчетов бы появилась обратная связь. тогда всё выше изложенное можно было бы реализовать программно.
    но что происходит с объектами внутри отчета из своей программы я узнать не могу :)
  • отредактировано 11:43
    Единственное, что можно сделать в этой ситуации - переделать preview так, чтобы допускалось одновременное существование нескольких отчетов со своими скриптами. Но этим я смогу заняться не раньше, чем через пару недель.
  • отредактировано November 2009
    я буду ждать любых изменений. спасибо что ответили, очень ясно и развернуто ) попробую пока реализовать это несколько иначе
    про события только вы ни чего не сказали...
  • отредактировано November 2009
    Исправьте ошибку дизайна, а то смотрится несолидно (Это при попытке поискать что-нибудь по выведенному отчету):

    4tQ1SIxfad.png
  • отредактировано November 2009
    У меня окно выглядит так:

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.