1) в документации по итогам написано: "При этом анализируются все ячейки, которые находятся выше и левее текущей (в которой мы печатаем итог). " Это надо учитывать при печати итогов в объединенной ячейке.
2) в отличие от ячеек объекта "Матрица", простые объекты "Текст" ведут себя несколько иначе в плане событий. В момент вызова BeforePrint значение Text1.Value еще не доступно, поэтому вместо него используйте обращение к полю:
Text1.Text = monthNames[((Int32)Report.GetColumnValue("MatrixDemo.Month")) - 1];
3) да, сделано специально, чтобы не засорять undo после каждого изменения в коде.
Ситуация такая:
На Data-бэнде лежат несколько TextObject и RichObject, у всех установлена рамка по всем краям - в FR при просмотре получаем красивую таблицу. При экспорте в RTF таблица превращается в набор разрозненных картинок с текстом. (Страница 2 в примере)
Можно ли как-то заставить FR нормально формировать таблицы с rtf-текстом ?
Попытался выйти из ситуации подложив под объекты RichObject обычные TextObject - чтобы в RTF нормально сформировалась таблица. И практически получилось - таблица сформировалась, однако ширина ее колонок сильно увеличена - между rtf-текстом, экспортированным из FR в виде картинок, и границами ячеек таблицы большой зазор. (Страница 1 в примере)
Можно ли как-то справится с проблемой ширины ячеек таблицы, если в них есть rtf-текст ?
Приложенный файл переименовать в "Simple List.frx".
Если, например, на Data-бэнде лежит RichObject и занимает всю ширину бэнда, при экспорте в rtf в документе получаются очень большие поля, хотя в FR-дизайнере у страницы установлены поля в 1см.
Похоже сломался метод SavePrepared(). Пробовал сохранять в файл готовый отчет и его открывать в дизайнере - файл нормально не открывается - пустое окно.
TextObject лежит на Data-бэнде, у TextBox установлено свойство "Может расти" - соотвественно, в готовом отчете у всех строк бэнда получается разная высота строк.
При экспорте в rtf ячейки таблицы получаются слишком маленькими по высоте - текст не влезает. Это почти у всех ячеек.
Обновил версию FastReport.Net с 1.0.14.0 до 1.0.61.0 и работавший до этого отчет стал выдавать такие ошибки:
(170,33): error CS0021: Невозможно применить индексирование через [] к выражению типа "object"
(170,87): error CS0117: "FastReport.Data.DataSourceBase" не содержит определение для "Rows"
надо установить текущую запись и обратиться к нужной колонке:
rationCourse.Prior();
...
А нельзя вернуть обратно свойство Rows у таблицы???
Честно говоря, у меня руки опускаются, когда я представлю, каким кодом мне надо заменить следующую запись:
if (rationCourse["CategoryStaff"].ToString() != rationCourse.Rows[rationCourse.CurrentRowNo + 1][6].ToString())
{
....
}
Вы работаете с TableDataSource, можно обратиться к св-ву Table, которое типа DataTable. Правда, в этом случае сортировка, фильтрация и связи master-detail работать не будут.
DataTable table = (Report.GetDataSource("MenuRationCourse") as TableDataSource).Table;
...
Добрый день AlexTZ.
Пока не смог добиться, чтобы в бэнде заголовок отчёта выводилось сообщение которое дополнялось бы данными из программы.
Содержание TextObject в заголовке: "Отчёт о принятых на работу в организацию [Table.CompanyName] [HeaderDate]"
Свойство text у текстового поля пробовал менять как через способ "Обращение к объектам отчета", так и передавать параметром FReport.SetParameterValue("HeaderDate", m_strHeaderRep);
Если string параметр не содержит информации, тогда выводиться имя организации [Table.CompanyName], иначе имени нет - выводиться лишь параметр.
Версия компонента пишет в VS2008 как 1.0.58, хотя это моя предыдущая версия, вчера поставил от 16.12.2008
Такая проблема: если в секцию конца группы добавить таблицу, а у нее определить ManualBuild, то ManualBuild вызывается, а ничего не происходит (нужная таблица не формируется)
Вылетает по исключению из Prepare() при третьем вызове.
************** Текст исключения **************
System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
в System.ThrowHelper.ThrowArgumentOutOfRangeException()
в System.Collections.Generic.List`1.get_Item(Int32 index)
в FastReport.Engine.ReportEngine.p1tDs6Vjy()
в FastReport.Engine.ReportEngine.Toyhjg7uM8()
в FastReport.Engine.ReportEngine.Tm5hw3pq8k()
в FastReport.Engine.ReportEngine.SNehfI3gy4(Boolean )
в FastReport.Engine.ReportEngine.HC5hcG99Al(Boolean )
в FastReport.Table.TableResult.MKaCUp9Ak(Object , EventArgs )
в FastReport.ReportComponentBase.OnAfterPrint(EventArgs e)
в FastReport.BandBase.RestoreState()
в FastReport.Engine.ReportEngine.cMVoSy8nU(BandBase , Boolean )
в FastReport.Engine.ReportEngine.xoMx3dB0e(BandBase , Boolean )
в FastReport.Engine.ReportEngine.0p2h6l6TIj()
в FastReport.Engine.ReportEngine.G5fhtJG32e(ReportPage )
в FastReport.Engine.ReportEngine.1KYhD5kBSK()
в FastReport.Engine.ReportEngine.pP2jEF4Mq(Boolean , Boolean , ReportPage )
в FastReport.Engine.ReportEngine.t6GwdwmuL(Boolean , Boolean )
в FastReport.Report.Prepare(Boolean append)
После трех часов поисков найдено следующее:
1. Вызываем Prepare() с данными № 1, № 2 и данными № 3 - вылетаем при формировании страницы с данными номер № 3.
2. Вызываем Prepare() с данными № 1 и данными № 3 - все ОК.
3. Вызываем Prepare() с данными № 2 и данными № 3 - все ОК.
4. Вылетает в строке:
public string ShowData = ""; // Переменная ShowData указана в ячейке таблицы, как отображаемое значение.
5. НЕ вылетаем во всех случаях, если ShowData = <Строка 1> + "\r" + <Строка 2> или
ShowData = <Строка 1> + <Строка 2>
Таким образом экспериментально установленно, что на определенном моменте FastReport'у не нравится символ "\n"...
Повтор ситуации в чистом C# к ошибке не приводит, т.е. следующая конструкция работает стабильно:
foreach (DataRow row in datasource.Rows)
{
ShowData = row[<Поле1>].ToString() + "\r\n" + row[<Поле2>].ToString();
}
Такая проблема: если в секцию конца группы добавить таблицу, а у нее определить ManualBuild, то ManualBuild вызывается, а ничего не происходит (нужная таблица не формируется)
Взял отчет Groups из демки, добавил на group footer таблицу, в manual build прекрасно печатается.
Комментарии
1) в документации по итогам написано: "При этом анализируются все ячейки, которые находятся выше и левее текущей (в которой мы печатаем итог). " Это надо учитывать при печати итогов в объединенной ячейке.
2) в отличие от ячеек объекта "Матрица", простые объекты "Текст" ведут себя несколько иначе в плане событий. В момент вызова BeforePrint значение Text1.Value еще не доступно, поэтому вместо него используйте обращение к полю:
Text1.Text = monthNames[((Int32)Report.GetColumnValue("MatrixDemo.Month")) - 1];
3) да, сделано специально, чтобы не засорять undo после каждого изменения в коде.
На Data-бэнде лежат несколько TextObject и RichObject, у всех установлена рамка по всем краям - в FR при просмотре получаем красивую таблицу. При экспорте в RTF таблица превращается в набор разрозненных картинок с текстом. (Страница 2 в примере)
Можно ли как-то заставить FR нормально формировать таблицы с rtf-текстом ?
Попытался выйти из ситуации подложив под объекты RichObject обычные TextObject - чтобы в RTF нормально сформировалась таблица. И практически получилось - таблица сформировалась, однако ширина ее колонок сильно увеличена - между rtf-текстом, экспортированным из FR в виде картинок, и границами ячеек таблицы большой зазор. (Страница 1 в примере)
Можно ли как-то справится с проблемой ширины ячеек таблицы, если в них есть rtf-текст ?
Приложенный файл переименовать в "Simple List.frx".
TextObject лежит на Data-бэнде, у TextBox установлено свойство "Может расти" - соотвественно, в готовом отчете у всех строк бэнда получается разная высота строк.
При экспорте в rtf ячейки таблицы получаются слишком маленькими по высоте - текст не влезает. Это почти у всех ячеек.
Вы можете это быстро поправить ?
Пробовал воспроизвести ошибку, не получилось. Можете прислать файлы .FRX и .FPX на tz@fast-report.com?
В готовом отчете (fpx) все нормально. Проблема проявляется в rtf. Установлен Word 2007.
Спасибо.
Обновил версию FastReport.Net с 1.0.14.0 до 1.0.61.0 и работавший до этого отчет стал выдавать такие ошибки:
(170,33): error CS0021: Невозможно применить индексирование через [] к выражению типа "object"
(170,87): error CS0117: "FastReport.Data.DataSourceBase" не содержит определение для "Rows"
Что делать?
Недавно менял работу с источниками данных. Покажите скрипт отчета?
Отправил по почте...
Я так понял у таблицы данных пропало свойство Rows, а я с его помощью смотрел значения в других строках...
rationCourse.CurrentRow[5]
на
rationCourse[rationCourse.Columns[5]]
или
rationCourse["CategoryAllergical"]
Вместо этого кода:
rationCourse.Rows[rationCourse.CurrentRowNo - 1]
надо установить текущую запись и обратиться к нужной колонке:
rationCourse.Prior();
...
- методы First/Next/Prior/Last;
- св-во CurrentRowNo - можно читать и писать.
А нельзя вернуть обратно свойство Rows у таблицы???
Честно говоря, у меня руки опускаются, когда я представлю, каким кодом мне надо заменить следующую запись:
if (rationCourse["CategoryStaff"].ToString() != rationCourse.Rows[rationCourse.CurrentRowNo + 1][6].ToString())
{
....
}
rationCourse.Next();
string nextStaff = rationCourse["CategoryStaff"].ToString();
rationCourse.Prior();
if (rationCourse["CategoryStaff"].ToString() != nextStaff)
{
....
}
Ага...
И так каскадом в три уровня, потому что надо свериться по трем полям таблицы...
Расстроили Вы меня...
DataTable table = (Report.GetDataSource("MenuRationCourse") as TableDataSource).Table;
...
Пока не смог добиться, чтобы в бэнде заголовок отчёта выводилось сообщение которое дополнялось бы данными из программы.
Содержание TextObject в заголовке: "Отчёт о принятых на работу в организацию [Table.CompanyName] [HeaderDate]"
Свойство text у текстового поля пробовал менять как через способ "Обращение к объектам отчета", так и передавать параметром
FReport.SetParameterValue("HeaderDate", m_strHeaderRep);
Если string параметр не содержит информации, тогда выводиться имя организации [Table.CompanyName], иначе имени нет - выводиться лишь параметр.
Версия компонента пишет в VS2008 как 1.0.58, хотя это моя предыдущая версия, вчера поставил от 16.12.2008
Большое спасибо.
Проверил, работает. Возможно, не хватает ширины объекта - не помещается весь текст?
Набор данных при заданном диапазоне дат был пуст
Спасибо.
Такая проблема: если в секцию конца группы добавить таблицу, а у нее определить ManualBuild, то ManualBuild вызывается, а ничего не происходит (нужная таблица не формируется)
************** Текст исключения **************
System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
в System.ThrowHelper.ThrowArgumentOutOfRangeException()
в System.Collections.Generic.List`1.get_Item(Int32 index)
в FastReport.Engine.ReportEngine.p1tDs6Vjy()
в FastReport.Engine.ReportEngine.Toyhjg7uM8()
в FastReport.Engine.ReportEngine.Tm5hw3pq8k()
в FastReport.Engine.ReportEngine.SNehfI3gy4(Boolean )
в FastReport.Engine.ReportEngine.HC5hcG99Al(Boolean )
в FastReport.Table.TableResult.MKaCUp9Ak(Object , EventArgs )
в FastReport.ReportComponentBase.OnAfterPrint(EventArgs e)
в FastReport.BandBase.RestoreState()
в FastReport.Engine.ReportEngine.cMVoSy8nU(BandBase , Boolean )
в FastReport.Engine.ReportEngine.xoMx3dB0e(BandBase , Boolean )
в FastReport.Engine.ReportEngine.0p2h6l6TIj()
в FastReport.Engine.ReportEngine.G5fhtJG32e(ReportPage )
в FastReport.Engine.ReportEngine.1KYhD5kBSK()
в FastReport.Engine.ReportEngine.pP2jEF4Mq(Boolean , Boolean , ReportPage )
в FastReport.Engine.ReportEngine.t6GwdwmuL(Boolean , Boolean )
в FastReport.Report.Prepare(Boolean append)
После трех часов поисков найдено следующее:
1. Вызываем Prepare() с данными № 1, № 2 и данными № 3 - вылетаем при формировании страницы с данными номер № 3.
2. Вызываем Prepare() с данными № 1 и данными № 3 - все ОК.
3. Вызываем Prepare() с данными № 2 и данными № 3 - все ОК.
4. Вылетает в строке:
public string ShowData = ""; // Переменная ShowData указана в ячейке таблицы, как отображаемое значение.
private void Table1_ManualBuild(object sender, EventArgs e)
{
...
ShowData = row[<Поле1>].ToString() + "\r\n" + row[<Поле2>].ToString();
}
5. НЕ вылетаем во всех случаях, если ShowData = <Строка 1> + "\r" + <Строка 2> или
ShowData = <Строка 1> + <Строка 2>
Таким образом экспериментально установленно, что на определенном моменте FastReport'у не нравится символ "\n"...
Повтор ситуации в чистом C# к ошибке не приводит, т.е. следующая конструкция работает стабильно:
foreach (DataRow row in datasource.Rows)
{
ShowData = row[<Поле1>].ToString() + "\r\n" + row[<Поле2>].ToString();
}
Взял отчет Groups из демки, добавил на group footer таблицу, в manual build прекрасно печатается.