Всем доброго времени суток.
В ASP.NET приложении используется контрол CrystalReportViewer. При его использовании мы столкнулись с давней проблемой экспорта в Excel в режиме Data only. Поэтому было принято решение написать собственный функционал экспорта в Excel. Проблема заключается в следующем — как теперь настроить CrystalReportViewer, чтобы при нажатии на кнопку экспорта отчета в выпадающем списке доступных форматов для экспорта убрать этот злополучный пункт "Excel 97-2000 (Data only)"?
Вариант со своим
полностью новым окном с доступными форматам экспорта
накладен, а вариант с
редактированием export.js — файла использующегося viewer-ом для генерирования окошка с опциями эксопрта — на машине заказчика
неприемлем из-за своей брутальности (другие приложения на севере тоже могут использовать CrystalReportViewer).
Именно рассмотрение второго варианта натолкнуло меня о мысли, что где-то в объектной модели вьюера можно передавать список доступных форматов экспорта, но как это сделать я не нашел ни в документации к CR (точнее даже, ее обрывки в сети, так как поиск нормальной представляет собой нетривиальную задачу), ни в www. Поэтому обращаюсь к гуру RSDN по Crystal Reports за помощью.
Подробнее об отброшенных вариантах:
Полностью новое окно — способ, рекомендованный в одной из статей на MSDN — создаем свою страницу с дроп-дауном, который заполняем сами и в зависимости от выбранного значения производим определенные телодвижения, чтобы произвести экспорт. Накладно, потому что все остальные типы экспорта полностью устраивают. И городить огород из-за одного пункта меню очень не хочется.
При установке CR.NET в папке c:\Inetpub\wwwroot\aspnet_client\system_web\2_0_50727\ создается подпапка CrystalReportWebFormViewer3, содержащая служебные файлы вьюера: стили, JavaScript, картинки, еще что-то. Так вот файл export.js судя по всему отвечает за динамическое генерирование того самого окошка с опциями экспорта. Он содержит в себе функцию getFormatDropdownList(), из кода которой
if( xls )
{
list += "<OPTION value=\"MSExcel\">" + L_ExcelFormat + "</OPTION>";
}
if( recXls )
{
list += "<OPTION value=\"RecordToMSExcel\">" + L_ExcelRecordFormat + "</OPTION>";
}
видно, что динамическое добавление пунктов дроп-дауна зависит от каких-то мистических переменных. Вот мне интересно каких?! И как это передать из объектной модели? В объекте ReportDocument я нашел лишь свойство ExportOptions.ExportFormatType, которое принимает естественно один единственный тип экпорта данных. Собственно брутальный способ заключается в комментировании строчки:
list += "<OPTION value=\"RecordToMSExcel\">" + L_ExcelRecordFormat + "</OPTION>";
Заранее спасибо за помощь.