Вопросы по Fastreport.net

1356

Комментарии

  • отредактировано 15:42
    Завтра добавлю св-во Designer.IsPreviewPageDesigner (оно уже есть, но internal).
  • отредактировано 15:42
    Здравствуйте.

    Написал я свой фастрепортовский Connection. Но не удается хотя бы спрятать от юзера ConnectionString в дизайнере.
    Если при построении отчёта я могу подменять ConnectionString для объектов DataConnectionBase необходимого типа в Dictionary, то в дизайнере это не проходит и при желании юзер может узнать логин и пароль (а если Windows Authentication, то вообще не получить доступ к данным).
    И этот вариант только псевдо-трёхуровневый.

    Всё таки придётся помучаться с написанием своих DbConnection и DbDataAdapter.

    P.S.
    Неужели нет способа элегантно решить проблему гибкого дизайна отчётов в трёхуровневой системе (DBMS - AppServer - Client)?
    Может у кого будут соображения на этот счёт?
  • отредактировано 15:42
    написал:
    Написал я свой фастрепортовский Connection. Но не удается хотя бы спрятать от юзера ConnectionString в дизайнере.

    Если проблема только в этом - определите у своего класса такое же свойство директивой new и спрячьте его:
        [Browsable(false)]
        public new string ConnectionString
        {
          get { return base.ConnectionString; }
          set { base.ConnectionString = value; }
        }
    
  • отредактировано October 2008
    У меня ворос почему иногда в отчёте при выводе данных некоторые строки произвольно подчёркиваються пунктиром такое вот бывает иногда? с чем это связанно?
  • отредактировано 15:42
    Кнопка на панели инструментов "Текст" - "Поворот текста", зелененькая такая...
  • отредактировано October 2008
    У меня возникла проблема вообщем я делал отчёт и во время печати мне понадобилось увеличить Report Data1.Height=1, почему то когда приходит время увеличения появляеться глюк чёрный экран помогите решить эту проблему мне надо все строчки увиличить в два раза по высоте а потом уменьшить так в отчёте нужно
    private void Data3_AfterPrint(object sender, EventArgs e)
    {
    string str1=((String)Report.GetColumnValue("type_dis.Название"));
    if((str1).Length >41)
    {
    Text22.Height=1;
    Data1.Height=1;
    }
    }
    это код вот так вот работает но почему чёрное? в том месте где должно было увеличить строку в два раза и вообще дальше отчёт не строиться
    r1.jpg
  • отредактировано 15:42
    Черное - это наслоения рамок объектов друг на друга. Потому что вот здесь Вы ставите высоту объекта = 1 пиксел
    Text22.Height=1;

    Если нужны сантиметры, делайте так:

    Text22.Height = Units.Centimeters * 1; // 1см
  • отредактировано October 2008
    есть ещё одна проблемка всё там же, мне удалось таки динамический расширить, но вот ещё одна проблемка в отчёте я использую суб репорт!!! Когда увеличил высоту data1 главного отчёта то изменяю высоту суб репорта он как то смещается неудачно приложу скрин помогите разобраться..4.jpg
    private void Data3_AfterPrint(object sender, EventArgs e)
    {
    string str1=((String)Report.GetColumnValue("type_dis.Название"));
    if((str1).Length >41)
    { Data3.Height=Units.Centimeters * 1;// расположен на субрепорте
    Text2.Height=Units.Centimeters * 1;// расположен на субрепорте
    Data1.Height=Units.Centimeters * 1;
    //Subreport1.Height=Units.Centimeters * 1;

    }
    }
  • отредактировано 15:42
    Вы из Data3.AfterPrint пытаетесь увеличить высоту Data3? Так делать нельзя - бэнд уже отпечатан, дальнейшие изменения его свойств невозможны.

    У Вас довольно простой отчет; зачем такие сложности (скрипт, сабрепорт)?
  • отредактировано 15:42
    Изучаю возможности Генератора отчёта да и вообще строю как понимаю интуитивно поэтому выходит так когда придёт опыт думаю смогу больше оптимизировать работу, а вам огромное спасибо за помощь разобрался с вами во всех проблемках, мне ещё столько отчётов предстоит делать так что думаю не раз буду обращаться
  • отредактировано 15:42
    Всегда пожалуйста! :)
  • отредактировано 15:42
    AlexTZ написал: »
    Если проблема только в этом - определите у своего класса такое же свойство директивой new и спрячьте его:

    Дело не в этом, а в том что не удавалось малой кровью решить проблему гибкого дизайна отчётов в трёхуровневой системе.
    Но с написанием своих DbConnection и DbDataAdapter, а также соответстующего FR DataConnection - заработало.
    Хотелось бы узнать список всех методов DbConnection и DbDataAdapter, которые FR DataConnection использует.
    Пока мы только реализовали метод Fill для своего DbDataAdapter.
  • отредактировано 15:42
    DbConnection:
    - ConnectionString;
    - Open();

    DbDataAdapter:
    - FillSchema(DataTable, SchemaType);
    - Fill(DataTable).

    Вроде все.
  • отредактировано October 2008
    Вопросик а зачем в последней сборке потребовалось убрать конструктор для DesignerSettings и ReportSettings? И как собственно теперь назначить свой DesignerSettings?
  • отредактировано 15:42
    Предполагается, что изменять установки надо, задавая значения отдельных св-в:
    Config.DesignerSettings.Icon = new Icon(...)
    А в классе EnvironmentSettings вообще отдельный набор св-в, без использования XXSettings.
  • отредактировано 15:42
    AlexTZ написал: »
    Предполагается, что изменять установки надо, задавая значения отдельных св-в:
    Config.DesignerSettings.Icon = new Icon(...)
    А в классе EnvironmentSettings вообще отдельный набор св-в, без использования XXSettings.
    Существует просто маленький нюанс - предположим мы открываем Дизайнер как MDIChild, тогда получается что установки CustomSave и так далее будут действовать глобально для всех открытых дизайнеров, а это как раз и не очень хорошо. Или опять где-то проглядел?
  • отредактировано 15:42
    AlexTZ написал: »
    DbConnection:
    - ConnectionString;
    - Open();
    DbDataAdapter:
    - FillSchema(DataTable, SchemaType);
    - Fill(DataTable).
    Вроде все.

    А можно подробнее как используется и где свойство ConnectionString?
    Оно нам не нужно по сути в трёхуровневой системе.
  • отредактировано 15:42
    ConnectionString используется для передачи всех параметров соединения; его же соединение сохраняет в файле отчета, а также передает в редактор соединения (ConnectionEditorBase). Какие-то настройки Вам ведь нужно хранить?
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 15:42
    AlexTZ написал: »
    Здравствуйте,

    В настоящий момент сделать это можно, используя разные отчеты и управляя порядком их печати программно. Например, так:

    report1.Load("отчет1.frx");
    report1.Prepare();
    report1.Load("отчет2.frx");
    report1.Prepare(true);
    report1.Load("отчет1.frx");
    report1.Prepare(true);
    report1.ShowPrepared();

    Этот код построит первый отчет, добавит к нему второй, потом опять первый.

    В ближайшем будущем появятся события ManualBuild у страницы отчета и самого отчета - можно будет управлять этим процессом в скрипте отчета.

    Здравствуйте!
    Как Вы предлагаете в моем случае не очень удобно, т.к. у меня есть набор уже готовых отчетов, которые я хочу слить воедино и печатать пакетом.
    Я попробовал использовать такую комбинацию:

    report.Prepare();
    report.SavePrepared(stream);

    report2.Prepare();
    report2.SavePrepared(stream2);

    reportAllInOne.LoadPrepared(stream);
    reportAllInOne.LoadPrepared(stream2);

    reportAllInOne.Preview = previewControl;
    reportAllInOne.ShowPrepared();

    но ничего не выходит, т.к. последняя вызываемая функция LoadPrepared(...) удаляет предыдущие страницы.

    Можно в функцию LoadPrepared(...) добавить параметр, который бы указывал reportAllInOne очищать PreparedPages или добавлять новые страницы в конец списка?
    Было бы очень удобно...

    Спасибо!
  • отредактировано 15:42
    Готовые отчеты соединять пока нельзя, подумаю над реализацией.
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 15:42
    1. У меня есть датасорс.
    В отчете я создаю группировку по одному из полей датасорса, а сортировать группы хочу по другому (специальному полю) и не могу это сделать...

    2. Если в настройках датасорса установить значение свойства SortOrder в None, то уже ничего не группируется...
  • Сергей ЛукьяновСергей Лукьянов Санкт-Петербург
    отредактировано 15:42
    AlexTZ написал: »
    Готовые отчеты соединять пока нельзя, подумаю над реализацией.

    Если я делаю так:

    for (int iPage = 0; iPage < report1.PreparedPages.Count - 1; iPage++)
    {
    FastReport.ReportPage page = report1.PreparedPages.GetPage(iPage);
    reportAllInOne.PreparedPages.AddPage(page);
    }

    то страницы появляются, но пустые...

    Может получиться каждую страницу выгружать в stream, а потом в другом отчете в конкретной странице загружать из stream-а?
  • отредактировано 15:42
    AddPage - это добавление именно пустой страницы в режиме построения отчета. Для данной задачи не подходит. Добавлю другой метод. К сожалению, специфика готового отчета в FR такова, что эффективно объединить два отчета не получится. Если отчеты большие, процесс объединения может быть долгим. Поэтому все же рассмотрите возможность объединять отчеты на этапе их построения.
  • CouRageCouRage Санкт-Петербург
    отредактировано 15:42
    Не получается у обекта Итогов в отчете изменить Evalutor.
    Делаю так:
    Report.Dictionary.Totals[0].Evaluator = Data1;
    
    После этого итоги перестают считаться - равны 0.
    Версия 1.0.5.
  • отредактировано 15:42
    Expression сменить не забыли? Да, итог надо менять в событии отчета StartReport.
  • CouRageCouRage Санкт-Петербург
    отредактировано 15:42
    Косяк у меня был. Спасибо за помощь.
  • отредактировано October 2008
    Не знаю по месту ли вопрос, но у меня он такой:
    В связи с выходом в свет Mono 2.0 хотелось бы узнать, есть ли какие то возможные перспективы работы с FastReport.NET в Linux-среде под Mono?
  • отредактировано 15:42
    Перспективы есть, но пока отдаленные. Связано это с тем, что в библиотеках, которые использует FR.Net, много работы с WinAPI. Соответственно, их нужно переделывать - отвязывать от API, где это возможно, или урезать функциональность. Это касается, в первую очередь, библиотеки DockPanel. Мы будем рассматривать возможность переделки в следующем году.
  • отредактировано 15:42
    AlexTZ написал: »
    Перспективы есть, но пока отдаленные. Связано это с тем, что в библиотеках, которые использует FR.Net, много работы с WinAPI. Соответственно, их нужно переделывать - отвязывать от API, где это возможно, или урезать функциональность. Это касается, в первую очередь, библиотеки DockPanel. Мы будем рассматривать возможность переделки в следующем году.

    Имеется ли в виду выпуск в перспективе отдельной сборки под Linux (Unix), как в OpenOffice, например?
  • отредактировано 15:42
    Да, если мы решим поддерживать mono в принципе.
Дискуссия закрыта.