Сижу вот пишу проект на сабже. Морду для Firebird, отчеты делать.
Примерная структура: аутентификация с использованием встроенной системы безопасности Firebird (пользователь, роль, пароль), динамически загружаемое из СУБД меню(настраивается под каждого пользователя/роль), из него ссылки ведут на страницу, собственно генеряющую отчет. Странице передается два идентификатора - один указывает на описание запроса к базе, а второй - на описание параметров отчета(параметры запроса, справочники всякие, русские заголовки таблиц и прочее безумие). Хранятся все описания и настройки тоже в базе данных.
Настройки кэшируются, чтобы постоянно в базу данных не лазить за ними. Их там не сильно много, корона с aspnet_wp.exe не свалится в памяти их подержать :)
В DataGrid вставляются TemplateColumn, шаблонам которых указываются загруженные из описания отчета классы, реализующие ITemplate. Можно извращаться с выводом содержимого элементов как душе угодно.
Печать делается сугубо в лоб - два css с разными media:
<LINK media="print" href="print.css" type="text/css" rel="stylesheet">
<LINK media="screen" href="screen.css" type="text/css" rel="stylesheet">
Все ненужные на печати элементы помечаются cssclass="noprint", которому в print.css указано display:none. Таким образом одна и таже страница является и интерфейсом и печатной формой.
Наткнулся на безумие, связанное с динамической генерацией элементов управления для параметров запроса - не загружают свое состояние, так как создаются в Page_Load, уже после загрузки ViewState. Нашел описание workaround здесь. Сейчас буду осмысливать, как впихнуть это счастье в свой проект.
Не совсем ясно, как реализовать справочники для параметров. Или я уже совсем на десктопных приложениях зациклился или без модальных/псевдомодальных диалогов справочник особо не сделаешь. Была мысль сделать что-то вроде гугловых подсказок c использованием ajax, но долго разбираться, поэтому, скорее всего, не в этой версии.
Примерная структура: аутентификация с использованием встроенной системы безопасности Firebird (пользователь, роль, пароль), динамически загружаемое из СУБД меню(настраивается под каждого пользователя/роль), из него ссылки ведут на страницу, собственно генеряющую отчет. Странице передается два идентификатора - один указывает на описание запроса к базе, а второй - на описание параметров отчета(параметры запроса, справочники всякие, русские заголовки таблиц и прочее безумие). Хранятся все описания и настройки тоже в базе данных.
Настройки кэшируются, чтобы постоянно в базу данных не лазить за ними. Их там не сильно много, корона с aspnet_wp.exe не свалится в памяти их подержать :)
В DataGrid вставляются TemplateColumn, шаблонам которых указываются загруженные из описания отчета классы, реализующие ITemplate. Можно извращаться с выводом содержимого элементов как душе угодно.
Печать делается сугубо в лоб - два css с разными media:
<LINK media="print" href="print.css" type="text/css" rel="stylesheet">
<LINK media="screen" href="screen.css" type="text/css" rel="stylesheet">
Все ненужные на печати элементы помечаются cssclass="noprint", которому в print.css указано display:none. Таким образом одна и таже страница является и интерфейсом и печатной формой.
Наткнулся на безумие, связанное с динамической генерацией элементов управления для параметров запроса - не загружают свое состояние, так как создаются в Page_Load, уже после загрузки ViewState. Нашел описание workaround здесь. Сейчас буду осмысливать, как впихнуть это счастье в свой проект.
Не совсем ясно, как реализовать справочники для параметров. Или я уже совсем на десктопных приложениях зациклился или без модальных/псевдомодальных диалогов справочник особо не сделаешь. Была мысль сделать что-то вроде гугловых подсказок c использованием ajax, но долго разбираться, поэтому, скорее всего, не в этой версии.