Работа c ADO.net

отредактировано 19:12 Раздел: FastReport Studio
Добрый день! В текущей версии FastReport Studio (3.16) реализована работа только с плоскими таблицами. А как работать со сложным датасетом, имеющим несколько таблиц и DataRelations, например:
написал:
<?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 ) этого набора данных нет.

Комментарии

  • almanalman космополит
    отредактировано September 2005
    vlad_galaxy написал:
    1. Как получить отчет типа Master-Detail?
    2. Как отсортировать данные?

    Скорее всего средствами .NET. В примерах Студии для С# лежит проект DataSetDemo. На самом деле это пример использования .NET класса DataTable. Представляет из себя обёртку, позволяющую прозрачно передавать DataTable в отчёт.
    Т.е. генератору отчётов надо подсовывать соответствующие DataTable.

    Вообще-то мы собирались этот пример положить вместе с interop.fastreport.dll в отдельную strong name билиотеку для .NET, но, прикинув объём работы, отложили такую интегрцию на некоторое время.
    vlad_galaxy написал:
    3. Как подключить пользовательскую функцию ( например, сумму прописью ), реализованную на C#?
    Используя метод AddFunction и событие OnUserFunction. Постараюсь на этой неделе добавить такой пример в Студию.
  • almanalman космополит
    отредактировано 19:12
    vlad_galaxy написал:
    3. Как подключить пользовательскую функцию ( например, сумму прописью ), реализованную на C#?
    Только что добавил такой пример для С#.
    Появится в завтрашнем билде, поскольку сегодня не успел выложить до автосборки.
    Как раз пример суммы прописью, правда для английского языка.
  • almanalman космополит
    отредактировано 19:12
    vlad_galaxy написал:
    В текущей версии FastReport Studio (3.16) реализована работа  только с плоскими таблицами. А как работать со сложным датасетом, имеющим несколько таблиц и DataRelations, например:

    1. Как получить отчет типа Master-Detail?
    Вскоре я выложу пример отчёта типа Master-Detail. Извините, что этот вопрос занимает так много времени.
    vlad_galaxy написал:
    2. Как отсортировать данные?

    Используйте .NET объект DataView.
  • almanalman космополит
    отредактировано September 2005
    vlad_galaxy написал:
    В текущей версии FastReport Studio (3.16) реализована работа  только с плоскими таблицами. А как работать со сложным датасетом, имеющим несколько таблиц и DataRelations, например:
    Если позволите использовать в Студии приведённый Вами пример датасета (XML-код), то в следующей версии добавлю код для работы с ним.

    Т.е. требуется Ваше согласие на cut'n'paste с форума в Студию.
  • almanalman космополит
    отредактировано 19:12
    Модифицарован пример DataSetDemo - добавлена обёртка для .NET DataView

    Пример показывает возможность сортировки данных отчёта средствами .NET.

    Модифицированный пример будет доступен начиная со сборки 3.18.6
  • almanalman космополит
    отредактировано 19:12
    Модифицарован пример DataSetDemo - добавлена обёртка для .NET DataSet

    Пример показывает возможность чтения данных из XML файла. За основу взят пример из этой темы.

    Модифицированный пример будет доступен начиная со сборки 3.18.8
  • отредактировано 19:12
    написал:
    Если позволите использовать в Студии приведённый Вами пример датасета (XML-код), то в следующей версии добавлю код для работы с ним.

    Т.е. требуется Ваше согласие на cut'n'paste с форума в Студию.
    Согласен.
    Я человек не суеверный, но мне кажется, ресурсы при разработке интерфейсов FR.Studio будут соизмеримы с затратами на разработку FR.Net.
    Объяснения типа "надо перекрестится" не переубедят.

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

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