В Crystal Reports можно использовать DataSet из .Net как источник данных. Для этого идем в "Create new connection", выбираем там "ADO.NET(XML)". В появившемся окошке выбираем dll, потом класс и метод, который возвращает обьект класса DataSet. Когда Crystal Reports вызывает указанный метод в dll, я могу связатся с базой данный и узнать ее структуру: какие таблицы есть, как они связаны друг с другом и т.д. По идее в этот момент данные сохранненные в базе меня не интерсуют. Только при генерации репорта эти данные должны дергатся из базы. Я думал, что Crystal Reports вызывает какой то метод у переданного обьекта DataSet. Если бы я смог перегрузить этот метод, то я бы мог реализовать собственную логику, как я эти данные тащу. К сожалению я так и не нашел, какой метод используется.
Я испробовал два варианта: 1) Я повесил листенеры на все классы из namespace "System.Data" с помощью библиотеки PostSharp. Я просто тупо покaзываю MessageBox с названием метода перед каждым вызовом любого метода любого класса из этого namespace. Я надеялся, что как только Crystal Reports дернет метод, я его увижу в MessageBoxe. Проблеам в том, что я вижу мессаги только пока я нахожусь в своем коде, как только Crystal Reports получил обьект, никаких MessageBox'oв больше не появляется.
2) Я написал собственные классы-потомки и перегрузил у них все основыне методы классов DataSet, DataTable и DataRow. Тут таже проблема, как только Crystal Reports получил мой обьект, никаких MessageBox'ов
Вопрос, какой же все таки метод DataSet'a дергает Crystal Reports, чтобы вытянуть данные из обьекта типа DataSet?
Заранее спасибо.
|
|