Работа c ADO.net
Добрый день! В текущей версии FastReport Studio (3.16) реализована работа только с плоскими таблицами. А как работать со сложным датасетом, имеющим несколько таблиц и DataRelations, например:
Вопросы:
1. Как получить отчет типа Master-Detail?
2. Как отсортировать данные?
3. Как подключить пользовательскую функцию ( например, сумму прописью ), реализованную на C#?
В ODBC ( BDE ) этого набора данных нет.
<?xml version="1.0" standalone="yes" ?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="ru-RU">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Document" msprop:Caption="Накладная">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" type="xs:int" />
<xs:element name="Грузоотправитель" type="xs:int" minOccurs="0" />
<xs:element name="Грузополучатель" type="xs:int" minOccurs="0" />
<xs:element name="Сумма" type="xs:decimal" minOccurs="0" />
<xs:element name="Дата" type="xs:date" minOccurs="0" />
<xs:element name="Номер" type="xs:decimal" minOccurs="0" />
<xs:element name="Плательщик" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Спецификация" msprop:Caption="Спецификация">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" type="xs:int" />
<xs:element name="Товар" type="xs:int" />
<xs:element name="Количество" type="xs:string" minOccurs="0" />
<xs:element name="Сумма" type="xs:decimal" minOccurs="0" />
<xs:element name="Цена" type="xs:decimal" minOccurs="0" />
<xs:element name="Накладная" type="xs:int" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Контрагент" msprop:Caption="Контрагент">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" type="xs:int" />
<xs:element name="Вышестоящий" type="xs:int" />
<xs:element name="Наименование" type="xs:string" minOccurs="0" />
<xs:element name="FirmaOKPO" type="xs:string" minOccurs="0" />
<xs:element name="DirektorName" type="xs:string" minOccurs="0" />
<xs:element name="BuhgelterName" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Товар" msprop:Caption="Товар">
<xs:complexType>
<xs:sequence>
<xs:element name="Id" type="xs:int" />
<xs:element name="Наименование" type="xs:string" minOccurs="0" />
<xs:element name="Цена" type="xs:decimal" minOccurs="0" />
<xs:element name="VolName" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:appinfo>
<msdata:Relationship name="Спецификации" msdata:parent="Document" msdata:child="Спецификация" msdata:parentkey="Id"
msdata:childkey="Накладная" msprop:ParentName="СпецификацииНакладной" msprop:ChildName="Накладные" />
<msdata:Relationship name="Накладные" msdata:parent="Контрагент" msdata:child="Document" msdata:parentkey="Id"
msdata:childkey="Грузополучатель" msprop:ParentName="НакладныеГрузополучателя" msprop:ChildName="Контрагент" />
<msdata:Relationship name="Починенные" msdata:parent="Контрагент" msdata:child="Контрагент" msdata:parentkey="Вышестоящий"
msdata:childkey="Id" msprop:ParentName="Подчиненные" msprop:ChildName="Контрагент" />
<msdata:Relationship name="НакладныеГрузоотправителя" msdata:parent="Контрагент" msdata:child="Document"
msdata:parentkey="Id" msdata:childkey="Грузоотправитель" msprop:ParentName="НакладныеГрузоотправителя"
msprop:ChildName="Контрагент" />
<msdata:Relationship name="Спецификации_x0020_для_x0020_товара" msdata:parent="Товар" msdata:child="Спецификация"
msdata:parentkey="Id" msdata:childkey="Товар" msprop:ParentName="СпецификацииТовара" msprop:ChildName="Товар" />
</xs:appinfo>
</xs:annotation>
</xs:schema>
Вопросы:
1. Как получить отчет типа Master-Detail?
2. Как отсортировать данные?
3. Как подключить пользовательскую функцию ( например, сумму прописью ), реализованную на C#?
В ODBC ( BDE ) этого набора данных нет.
Комментарии
Скорее всего средствами .NET. В примерах Студии для С# лежит проект DataSetDemo. На самом деле это пример использования .NET класса DataTable. Представляет из себя обёртку, позволяющую прозрачно передавать DataTable в отчёт.
Т.е. генератору отчётов надо подсовывать соответствующие DataTable.
Вообще-то мы собирались этот пример положить вместе с interop.fastreport.dll в отдельную strong name билиотеку для .NET, но, прикинув объём работы, отложили такую интегрцию на некоторое время.
Используя метод AddFunction и событие OnUserFunction. Постараюсь на этой неделе добавить такой пример в Студию.
Появится в завтрашнем билде, поскольку сегодня не успел выложить до автосборки.
Как раз пример суммы прописью, правда для английского языка.
Используйте .NET объект DataView.
Т.е. требуется Ваше согласие на cut'n'paste с форума в Студию.
Пример показывает возможность сортировки данных отчёта средствами .NET.
Модифицированный пример будет доступен начиная со сборки 3.18.6
Пример показывает возможность чтения данных из XML файла. За основу взят пример из этой темы.
Модифицированный пример будет доступен начиная со сборки 3.18.8
Я человек не суеверный, но мне кажется, ресурсы при разработке интерфейсов FR.Studio будут соизмеримы с затратами на разработку FR.Net.
Объяснения типа "надо перекрестится" не переубедят.