Table не совсем удобно

отредактировано 09:29 Раздел: FastReport .NET
Решил попробовать объект Table. Очень понравился и в принципе, он элементарно решил бы мою задачку, если бы ни одно но. Оказалось странным, что я не смог реализовать простой сценарий, когда Table, состоящий из 2-х столбцов, занимает всю площадь бэнда, левый столбец подстраивается под размер содержимого (это работает), а вот правый занимает всю оставшуюся ширину. Печально именно то, что надо четко указать все размеры таблицы и столбцов, вместо того, что бы указать, что таблица далжна растянуться на всю ширину бэнда и некий столбец должен занимать оставшееся свободное место. Возможн, это можно решить динамическим методом печати таблицы, но данная задача довольно таки проста, что бы не дать возможности реализовать ее кликая только мышкой без написания сценариев.

Или я где-то не прав в понимании идеологии данного объекта?

Спасибо.

Комментарии

  • отредактировано 09:29
    В настоящий момент, этот сценарий надо реализовывать с помощью скрипта. В будущем, возможно, расширим функциональность объекта Table.
  • отредактировано 09:29
    AlexTZ написал: »
    В настоящий момент, этот сценарий надо реализовывать с помощью скрипта.
    Напрашивается резонный вопрос: а как? Как правильно реализовать требуемый сценарий поведения таблицы? Спасибо.
  • отредактировано 09:29
    У бэнда, на котором лежит таблица, создайте обработчик AfterLayout:
        private void ReportTitle1_AfterLayout(object sender, EventArgs e)
        {
          // простой вариант с растягиванием второй колонки до максимума
          Table1.Columns[1].Width = Engine.PageWidth - Table1.Columns[0].Width;
        }
    

    Также нужно снять ограничение на максимальную ширину у колонки (св-во MaxWidth поставьте побольше).
  • отредактировано 09:29
    AlexTZ написал: »
    Также нужно снять ограничение на максимальную ширину у колонки (св-во MaxWidth поставьте побольше).
    Спасибо за информацию!
    Но на счет MaxWidth надо что-то подумать. Первое, что бросились мне в глаза, когда я стал разбираться с таблицей, это то, что таблица может вылазить далеко за страницу, если неправильно задать значение.
  • отредактировано November 2010
    AlexTZ написал: »
    У бэнда, на котором лежит таблица, создайте обработчик AfterLayout:
        private void ReportTitle1_AfterLayout(object sender, EventArgs e)
        {
          // простой вариант с растягиванием второй колонки до максимума
          Table1.Columns[1].Width = Engine.PageWidth - Table1.Columns[0].Width;
        }
    

    Также нужно снять ограничение на максимальную ширину у колонки (св-во MaxWidth поставьте побольше).
    Попробовал расширить таблицу на всь ширину страницы за счет растягивания какого-нибудь столбца на разницу между шириной страницы и таблицы. В итоге, ширина таблицы стала равной ширине страницы, но тогда, последний столбец стал перебрасываться на следующий лист, как буд-то он не влазит. В итоге, достаточно на одну сотую уменьшить ширину столбца, что вернуло последний столбец на место. Думал, может дело в бордерах таблицы, но нет, даже без бордеров ситуация та же.
    Для чистоты эксперимента, я расширил текстовое поле на всю ширину страницы, проверил значения ширины, один в один, что у страницы, что у текстового поля. Но при этом, текстовое поле не разрывается.
    Эксперимент проводил в версии 1.5.12 по примеру "Fit Dynamic Table To Page". В этом примере таблица после растягивания действительно на одну сотую уже страницы, но ведь тот метод расчета ширины столбцов может дать и полное равенство ширине страницы и тогда последний столбец тоже будет перепрыгивать на следующий лист.

    Как Вы думаете, это корректное поведение таблицы в данном случае?
  • отредактировано November 2010
    Заметил неприятную особенность таблицы. Если включить режим "Wysiwyg" у ячеек, то то ли исчезает авторазмер у столбцов, то ли он неправильно начинает обрабатываться. В итоге, получается какая-то каша, там где можно было бы растянуть ширину столбца, начинается перенос слов на следующую строку, а если в ячейте только одно слово, то на следующую строку переносится последняя буква.
  • отредактировано 09:29
    Спасибо разработчикам! Поправили проблему с переносом последнего столбца на следующую страницу при попытке растянуть таблицу на всю ширину страницы. Проблема заключалась в потере точности чисел с плавающей запятой в n-нном знаке после запятой, т.е. в MessageBox выводим ширину таблицы и ширину страницы - они равны, а на самом деле, ширина таблицы получалась больше, т.к. в восьмом знаке после запятой появлялись цифры.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.