none
Свойство FixedHeader RRS feed

  • Вопрос

  • Делаю отчет, в котором для таблички указываю свойство - FixedHeader. На вкладке Preview заголовок таблички фиксируется, и при прокрутке страницы строки просто скрываются за фиксированным заголовком, позволяя просматривать записи которые не помещаются на один лист прокрутки по вертикали. Но когда я просматриваю этот же репорт на портале через браузер - никакой фиксации заголовка нет!!! И при сохранении в Exel файл фиксация не передается! Для чего же тогда такая возможность реализована в Reporting Services? Или все же есть возможность реализовать механизм фиксации столбцов в Html представлении или при экспорте в Exel? Или же это проблемма только с версией моего браузера? Помогите разобраться.
    11 апреля 2007 г. 5:59

Ответы

  • Механизм фиксации СТОЛБЦОВ в HTML, естественно, отсутствует, т.к. отсутствует само понятие «столбец» (нет такого тэга). В принципе, для не очень больших таблиц и не очень большого числа столбцов (читай: набора тэгов <TD>) можно написать стиль, который будет корректно работать в Internet Explorer, используя CSS-выражение Expression для вычисления относительной позиции элемента. Но, во-первых, это работает ТОЛЬКО в IE (а значит, неприемлемо для реализации в мультибраузерной концепции Reporting Services), а во-вторых, поскольку количество обрабатываемых стилей =  количество строк * количество «замораживаемых» столбцов, в случае длинной таблицы это загрузит даже очень мощные компьютеры так, что ВСЁ изображение «замерзнет».

    Что же касается фиксации ЗАГОЛОВКА, то вот она-то как раз в HTML-спецификациях предусмотрена (применением конструкции типа <THEAD><TR><TH>Заголовок1<TH/><TH>Заголовок2</TH></TR></THEAD>). Жаль только, ни один из существующих браузеров (включая IE7) до сих пор не умеет их правильно обрабатывать (я могу ошибаться, пусть товарищи меня поправят).

    В результате Microsoft применяет на страницах с включённым свойством FixedHeader кросс-браузерный сценарий ShowFixedTableHeaders изрядной длины, который, надо признать, свою работу, конечно, делает, но весьма не эстетично (заголовок «пляшет» при прокрутке). Справедливости ради надо сказать, что я не видел ни одной достойной (тем более, кросс-браузерной) реализации фиксации заголовка с использованием JavaScript – даже если сценарий короткий, работает такой механизм всё равно медленно (по крайней мере, заметно для глаза). Хорошо, на мой взгляд,  работает только стиль для заголовка, вычисляющий положение тега <TR>, содержащего заголовок, относительно его контейнера с использованием всё того же CSS-выражения Expression (причём только через таблицу стилей – если прописать “top: expression(this.offsetParent.scrollTop);” прямо в атрибуте style, заголовок опять станет прыгать). Вот если бы Microsoft позволил нам самим назначать стили строкам таблицы и ячейкам, мы ого-го много чего бы смогли (см. например, пост «Вертикальный текст» в этом же форуме).

    По поводу экспорта в Excel могу сказать только одно – хорошо хоть так экспортируется. По крайней мере, получающийся файл Excel очень похож на оригинал (сравните с реализацией такого экспорта в Crystal Reports). Ну, хотелось бы, конечно, чтобы при этом сохранялась информация о размере и ориентации страницы, полях, фиксированных заголовках, агрегатных формулах (и сами формулы работали бы НЕ через механизм именованных ячеек)…

    Пока (будем надеяться, что ПОКА) разработчики нам таких возможностей не предоставили. Но они же работают?

    А, разработчики?

    13 апреля 2007 г. 11:44

Все ответы

  • Механизм фиксации СТОЛБЦОВ в HTML, естественно, отсутствует, т.к. отсутствует само понятие «столбец» (нет такого тэга). В принципе, для не очень больших таблиц и не очень большого числа столбцов (читай: набора тэгов <TD>) можно написать стиль, который будет корректно работать в Internet Explorer, используя CSS-выражение Expression для вычисления относительной позиции элемента. Но, во-первых, это работает ТОЛЬКО в IE (а значит, неприемлемо для реализации в мультибраузерной концепции Reporting Services), а во-вторых, поскольку количество обрабатываемых стилей =  количество строк * количество «замораживаемых» столбцов, в случае длинной таблицы это загрузит даже очень мощные компьютеры так, что ВСЁ изображение «замерзнет».

    Что же касается фиксации ЗАГОЛОВКА, то вот она-то как раз в HTML-спецификациях предусмотрена (применением конструкции типа <THEAD><TR><TH>Заголовок1<TH/><TH>Заголовок2</TH></TR></THEAD>). Жаль только, ни один из существующих браузеров (включая IE7) до сих пор не умеет их правильно обрабатывать (я могу ошибаться, пусть товарищи меня поправят).

    В результате Microsoft применяет на страницах с включённым свойством FixedHeader кросс-браузерный сценарий ShowFixedTableHeaders изрядной длины, который, надо признать, свою работу, конечно, делает, но весьма не эстетично (заголовок «пляшет» при прокрутке). Справедливости ради надо сказать, что я не видел ни одной достойной (тем более, кросс-браузерной) реализации фиксации заголовка с использованием JavaScript – даже если сценарий короткий, работает такой механизм всё равно медленно (по крайней мере, заметно для глаза). Хорошо, на мой взгляд,  работает только стиль для заголовка, вычисляющий положение тега <TR>, содержащего заголовок, относительно его контейнера с использованием всё того же CSS-выражения Expression (причём только через таблицу стилей – если прописать “top: expression(this.offsetParent.scrollTop);” прямо в атрибуте style, заголовок опять станет прыгать). Вот если бы Microsoft позволил нам самим назначать стили строкам таблицы и ячейкам, мы ого-го много чего бы смогли (см. например, пост «Вертикальный текст» в этом же форуме).

    По поводу экспорта в Excel могу сказать только одно – хорошо хоть так экспортируется. По крайней мере, получающийся файл Excel очень похож на оригинал (сравните с реализацией такого экспорта в Crystal Reports). Ну, хотелось бы, конечно, чтобы при этом сохранялась информация о размере и ориентации страницы, полях, фиксированных заголовках, агрегатных формулах (и сами формулы работали бы НЕ через механизм именованных ячеек)…

    Пока (будем надеяться, что ПОКА) разработчики нам таких возможностей не предоставили. Но они же работают?

    А, разработчики?

    13 апреля 2007 г. 11:44
  • Спасибо огромное за подробное объяснение! Потому что раньше понять зачем нужно фиксирование колонок в Reporting Services, если этого нигде, кроме как в нем самом, увидеть невозможно, мне было крайне сложно. Что же придется обходить это дело, просто видимо с помощью макросов в Exel.
    16 апреля 2007 г. 14:03