Несвязанные поля

Оценить
(0 голоса)

В зависимости от проектируемого приложения работы с отчетами, вы можете подготовить базовый макет отчета, который на момент своего создания не будет связан ни с одной конкретной базой данных. Это будет удобно, например, при проектировании приложения, в котором пользователь сможет выбирать из списка поля базы данных и перетаскивать их в макет псевдоотчета в вашем приложении. При отображении отчета код должен будет подогнать выбранные поля к действительному расположению полей в Crystal Reports. Другой случай — вы проектируете отчет, который пользователь сможет

применять для связи либо с тестовой базой данных, либо с базой данных предприятия. Хотя для данного примера хорошим альтернативным вариантом может быть уже знакомый вам метод SetDataSource, вы можете также вручную присваивать значения базы данных полям в отчете.

RDC предлагает возможности, упрощающие создание таких специализированных отчетов. Несвязанные поля (unbound fields) могут добавляться в отчет в конструкторе ActiveX точно так же, как поля базы данных, поля формул и тому подобное. Единственное отличие заключается в том, что эти поля фактически не связаны ни с какой определенной таблицей базы данных или полем. Они назначаются им во время выполнения путем автоматического или ручного связывания (о чем более подробно будет рассказываться чуть позже в этой главе).

Добавление несвязанных полей в отчет. Прежде чем использовать несвязанные поля, их необходимо добавить в отчет в конструкторе RDC. В окне Field Explorer будет отображаться дополнительная категория Unbound Fields (Несвязанные поля), которой нет в обычном конструкторе Crystal Reports. Если вы щелкнете на знаке плюс рядом с этой категорией, появится список доступных для несвязанных полей типов данных. Перетащите необходимые типы данных в отчет, точно так же, как вы бы это делали с другими объектами в проводнике Field Explorer (рис. 25.15).

Несвязанные поля

Всем добавленным несвязанным полям RDC автоматически присваивает имена по умолчанию. В зависимости от того, как вы планируете в конечном счете связывать эти поля с источником данных, вы можете оставить им эти имена. Однако, пожалуй, все- таки лучше будет присвоить им более осмысленные имена, поскольку это в дальнейшем упростит написание кода связывания. А если вы планируете использовать метод автоматического связывания (который будет более подробно рассматриваться в одном из следующих разделов), вам вообще следует присвоить им имена, соответствующие именам полей в источнике данных, с которым вы их будете связывать.

Связывание полей с источником данных. Создав отчет и добавив в него несвязанные поля, вы можете начать связывать их во время выполнения. Во-первых, объявите и назначьте все необходимые объекты. В следующем фрагменте кода определяется объект Report, содержащий отчет конструктора ActiveX, и создается набор записей ADO. Поля из этого набора записей будут связаны с несвязанными полями, созданными в отчете.

Dim Report As New CrystalReportl

Dim rs As New ADOR.Recordset

rs.Open "select * from orders", "xtreme sample database 11"

Report.Database.AddADOCommand rs.ActiveConnection, rs.ActiveCommand

Имейте в виду, что хотя несвязанные поля, которые вы добавили в отчет, не “связаны”

ни с какими определенными полями базы данных, сам объект Report обязательно должен быть связан с соответствующим источником данных, прежде чем с ним можно будет связывать какие-либо поля. Сделать это можно с помощью метода AddADOCommand, AddOLEDBSource или какого-нибудь другого подобного метода.

После того как будет установлено соединение с данными, связать несвязанные поля с полем базы данных можно будет двумя способами: посредством автоматического связывания или посредством связывания вручную.

Автоматическое связывание. При автоматическом связывании для связывания полей с фактическими полями источника данных используется тип данных несвязанного поля и, необязательно, имя объекта. Чтобы применить автоматическое связывание, достаточно выполнить одну строку кода, подобную следующей:

Report.AutoSetUnboundFieldSource crBMTNameAndValue

Передавая константу crBMTNameAndValue в метод AutoSetUnboundFieldSource, вы указываете, что RDC для сопоставления с полем в источнике данных должен использовать как имя, так и тип данных несвязанного поля. Если вы хотите, чтобы сопоставление объекта с полем выполнялось только на основе имени, передайте константу crBMTName. В этом случае RDC будет пытаться сопоставлять несвязанные поля с полями в источнике данных исключительно на основе имени, не обращая внимания на тип данных.

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

Report.OrderlD.SetUnboundFieldSource "{ado.Order ID}"

Report.OrderDate.SetUnboundFieldSource "{ado.Order Date}"

Report.OrderAmount.SetUnboundFieldSource "{ado.Order Amount}"

Report.ShipVia.SetUnboundFieldSource "{ado.Ship Via}"

В этом примере отдельные несвязанные сопоставляются с полями источника данных с помощью метода SetUnboundFieldSource объекта поля.

868 Часть III. Специализированные Windows- и Web-приложения для работы с отчетами

Настройка компонента Report Viewer

Если вы добавили в свой проект ActiveX-компонент Report Viewer, знайте, что у вас есть масса возможностей настроить его внешний вид и поведение. По умолчанию RDC добавляет Report Viewer в свою собственную форму вместе с небольшой частью кода для присвоения объекта Report компоненту Report Viewer и изменения размера Report Viewer в соответствии с размерами формы.

Такое поведение по умолчанию — лишь часть возможностей Report Viewer. Этот компонент имеет множество опций, которые доступны в его собственной библиотеке и позволяют более тесно интегрировать его в приложении. Вы можете настроить, как будет выглядеть Report Viewer, какие элементы управления и кнопки панели инструментов в нем будут доступны, а также какими будут размеры его окна. Вы можете даже выполнять все функции, предлагаемые кнопками его панели инструментов, прямо в коде. Это позволит вам сделать так, чтобы (если необходимо) в окне Report Viewer не отображались никакие элементы управления, а только сам отчет. Вы также сможете создать абсолютно отдельный интерфейс пользователя с функциями управления страницами, изменения масштаба отображения, печати, экспорта и так далее.

Кроме того, Report Viewer имеет достаточно гибкую модель событий, которая будет инициировать события по мере выполнения компонентом Report Viewer различных функций или при взаимодействии с ним пользователя. Вы можете перехватывать события щелчка на кнопках, перехода на более высокий уровень детализации, изменения масштаба отображения и прочие. Вы даже можете сделать так, чтобы при “срабатывании” этих событий выполнялся какой-то дополнительный код, или просто перехватывать и отменять события, если не хотите, чтобы Report Viewer выполнял их.

Когда вы добавляете Report Viewer в форму (или когда он добавляется автоматически RDC), внутри формы появляется контур Report Viewer как объекта. Если вы выделите объект Report Viewer, то в окне Properties в Visual Basic увидите огромное количество свойств времени проектирования, как показано на рис. 25.16.

Если вы хотите, чтобы поведение Report Viewer в приложении всегда оставалось неизменным, вы можете изменить его свойства во время проектирования, указав, например, какие кнопки должны быть доступны в панели инструментов, должно ли отображаться дерево групп отчета, должна ли у пользователя быть возможность перехода на более высокий уровень детализации и так далее.

БОЛЬШИНСТВО ИЗ Этих свойств можно также определять и во время выполнения путем присвоения свойствам объекта Report Viewer соответствующих значений. Поскольку объект Report Viewer фактически добавляет в проект свою собственную СОМ-библи- отеку, посмотреть, как выглядит его объектная модель, какие свойства, методы и события доступны, вы сможете, отобразив окно браузера Object Browser. Чтобы сделать это, находясь в окне Visual Basic, нажмите клавишу <F2> или выберите в меню View (Вид) пункт Object Browser. Затем в выпадающем списке библиотек выберите значение CrystalActiveXReportViewerLibl 1 Ctl, чтобы просмотреть объектную модель, предлагаемую библиотекой Report Viewer (рис. 25.17).

Ниже показан взятый из приложения Xtreme Orders фрагмент кода, определяющий различные аспекты поведения Report Viewer. Кнопка Print (Печать) отключается

в Report Viewer за счет присваивания свойству EnablePrintButton значения False. Кнопка Help (Справка) отображается в окне Report Viewer путем присваивания свойству EnableHelpButton значения True. Элемент управления с логотипом компании Business Object включается присваиванием свойству EnableAnimationCtrl значения True.

Несвязанные поля

Свойство EnableDrillDown определяет, может ли пользователь дважды щелкнуть кнопкой мыши на группе в Report Viewer, чтобы развернуть ее (если пользователь выбирает отображение подробного отчета, развертывать группу не имеет смысла).

CRViewerl.EnablePrintButton = False CRViewerl.EnableHelpButton = True CRViewerl.EnableAnimationCtrl = True

If frmXtremeOrders.chkSummary Then CRViewerl.EnableDrillDown = True Else

CRViewerl.EnableDrillDown = False End If 'frmXtremeOrders.chkSummary

Перехват событий Report Viewer
End Sub
Обработка ошибок
Другие свойства и методы RDC
Метод DiscardSavedData

Добавить комментарий


Защитный код
Обновить