Второй шаблон (версия для печати) отличается от первого незначительно, приводить его не будем (вы можете посмотреть его в материалах к статье).
Третий файл (версия для экспорта в Excel) представляет определенный интерес. Начиная с Office 2000, Microsoft ввела в Excel очень интересный формат - Excel XML. Он интересен тем, что это простой XML файл с определенной разметкой, следовательно, с нашей точки зрения это просто очередное представление дизайна. Вообще, чтобы подготовить шаблон для этого файла, нужно разобраться в структуре Excel XML, но, как истинно ленивые программисты пойдем более легким (и оптимальным путем) :). Откроем Excel и просто наберем в нем нужно вида текст. После этого выберем в меню File команду Save As и укажем при сохранении файла, что сохранять его нужно как Excel XML. Вот и все - шаблон готов.
Далее напишем страницу, которая будет открывать и обрабатывать эти шаблоны:
/// /// Страница, над которой мы будем ставить эксперименты /// на вход принимаем номер шаблона (?Template=): /// 1 - обычный /// 2 - версия для печати /// 3 - Excel версия (для открытия требует Excel 2000 или XP) /// public class Default : System.Web.UI.Page { /// /// Не Page_Load - зачем нам эти лишнии инициализации, все равно не используем. /// Здесь вообще спорный вопрос, стоит ли от System.Web.UI.Page наследоваться /// /// override protected void OnInit(EventArgs e) { string UseTemplateNumber = 1;
// Считываем номер файла темплейтов, который нам нужно открыть, на всякий случай проверив if ( Request.QueryString[Template] != null) { UseTemplateNumber = Request.QueryString[Template].ToString();
// Задаем значения переменных _Parser.SetVariable(NUMBER, 2347687 ); _Parser.SetVariable(TYPE, 234-234-DD-9 ); _Parser.SetVariable(DAT_START, 2003/01/01 ); _Parser.SetVariable(DAT_END, 2003/03/03 ); _Parser.SetVariable(TEXT, Что-нибудь умное, с графиками, диаграммами, без ошибок ); _Parser.SetVariable(MANAGER, Такой Т.О. );
// Если мы хотим, чтобы файл был открыт сразу Excel-ем, подкрректируем заголовоки if ( UseTemplateNumber == 3 ) { Response.ContentType = application/vnd.ms-excel; Response.AddHeader( Content-Disposition, attachment; filename=Template_3.xls ); }
// И выводим в ответ на запрос Response.Write( _Parser.ParseToString() );
Trace.Warn(Закончили работать с темплейтами); } }
Посмотрим, насколько эффективно это работает - включим трасерт и засечем время работы написанного обработчика - 0.0004 сек - хороший результат. Конечно, при использовании объемных файлов шаблонов, заполнении их информаций из БД, использовании более сложных обработчиков шаблонов время парсинга возрастет, но, как показывает опыт работы с реальными проектами, эти накладные расходы на обработку файлов шаблонов пренебрежительно малы.
Выводы
Технология шаблонов дизайна совсем не излишняя в ASP .NET, ее можно и нужно применять. Причем наиболее эффективно ее применение не вместо механизмов, предлагаемых ASP .NET, а совместно с ними, дополняя их и облегчая решение рутинных задач.