Переменное количество стобцов в Tableobject

отредактировано September 2011 Раздел: FastReport .NET
имеем TableObject с одним столбцом и одной строкой, в Cell вставлена картинка(поле базы данных). Необходимо уметь печатать столько картинок в строке, сколько хочет пользователь.
Сейчас делаю так из ко:
Report NewRep = new Report();
NewRep.Load(Application.StartupPath + "\\test.frx");
TableObject tb = NewRep.FindObject("Table1") as TableObject;
tb.ColumnCount = 3;
NewRep.Show();
что мне кажется не правильным ибо каждый раз изменяет таблицу, т.е. в дизайнере откроется таблица с тремя столбцами в данном случае, хотя я проектировал один.
Есть ли другой путь, например, через переменную, передаваемую в отчет?
P.S. А я правильно делаю? Не будет у меня в одной строке одна и та же картинка?

Комментарии

  • отредактировано 09:09
    Здравствуйте,

    Таблицу в данном случае лучше печатать в динамическом режиме. См. здесь
    http://www.fast-report.com/documentation/U...objectprint.htm
    и примеры отчетов в демке, Table/Column DataSource
  • отредактировано 09:09
    Нечто подобное я и делаю, но почему не работает такой код
          DataSourceBase columnData = Report.GetDataSource("Table");
          columnData.Init();      
          
          Column7.MaxWidth = (Page1.PaperWidth - Page1.LeftMargin - Page1.RightMargin);
          
          // Количество столбцов с строке
          int ColumnInRow = 2;
          
          if (ColumnInRow <= 0) {ColumnInRow = 1;}
          
          float ColumnWidth = (float)(Page1.PaperWidth / ColumnInRow);
          
          if (ColumnInRow == 1) {ColumnWidth = Page1.PaperWidth;}
          
          if (ColumnWidth > Page1.PaperWidth) {ColumnWidth = (Page1.PaperWidth) / 2;}
          //MessageBox.Show(ColumnInRow.ToString());
          
          Column7.Width =  ColumnWidth * Units.Centimeters;
          MessageBox.Show(Column7.Width.ToString());
          
          while (columnData.HasMoreRows)
          {
              Table3.PrintColumn(0);
              Table3.PrintRows();
              columnData.Next();     
          }
    
  • отредактировано 09:09
    Не совсем понятны манипуляции с Column.Width. Учтите, что размеры страницы и поля измеряются в миллиметрах, все остальное - в пикселах. Вот здесь:
    Column7.MaxWidth = (Page1.PaperWidth - Page1.LeftMargin - Page1.RightMargin);
    правильно так:
    Column7.MaxWidth = (Page1.PaperWidth - Page1.LeftMargin - Page1.RightMargin) * Units.Millimeters;
    Здесь:
    Column7.Width = ColumnWidth * Units.Centimeters;
    правильно так:
    Column7.Width = ColumnWidth * Units.Millimeters;
  • отредактировано 09:09
    Требовалось разместить на странице нужное количество картинок в строке.
    При этом мы не знаем сколько катринок будет выбрано из базы.
    Следующий код работает:
        private void Table2_ManualBuild(object sender, EventArgs e)
        {
          DataSourceBase columnData = Report.GetDataSource("Рисунки");
          columnData.Init();
         
          int ColumnInRow = 2; // Заданное кол-во картинок в строке
          
          float MaxColumnWidth = (Page1.PaperWidth - Page1.LeftMargin - Page1.RightMargin);
          float ColumnWidth = ((float)(MaxColumnWidth / ColumnInRow) * Units.Millimeters);
          Column1.MaxWidth = ColumnWidth;
          Column1.Width = ColumnWidth;
                
          float MaxColumnHeight = (Page1.PaperHeight - Page1.TopMargin - Page1.BottomMargin);
          float ColumnHeight = ((float)(MaxColumnWidth / ColumnInRow) * Units.Millimeters);
          Table2.Height = ColumnHeight;
          Row1.Height = Table2.Height - (float)(5 * Units.Millimeters);
          Row2.Height = (5 * Units.Millimeters);
          
          while (columnData.HasMoreRows)
          {
            Table2.PrintColumn(0);
            Table2.PrintRows();
            columnData.Next();
          }
        }
    
    Проблем нет, когда таблица в заголовке страницы.
    Если таблица находится в бэнде Данные то возникают проблемы с переносом на следующую страницу при добавлении заголовков и промежуточных данных.
    Можно ли каким-нибудь образом вычислить высоту оставшегося свободного места на странице из кода? Или эту задачу можно решить другим способом?
  • отредактировано 09:09
    Готовая таблица разбивается на страницы автоматически. Вы можете узнать размеры готовой таблицы в событии AfterCalcBounds у объекта ResultTable. Пример есть в демо, отчет "Table/Fit Dynamic Table To Page".

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

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