Перенос столбцов Tfrxdbcrossview на одной странице.
Добрый день.
Нужно построить отчёт, попробовав разные варианты построил на основании TfrxDBCrossView. Но возник вопрос, таблица растёт в одну сторону, т.е. после выхода кол-ва столбцов за границу страницы таблица продолжается на следующей странице, а хотелось бы, чтобы таблица сперва заполняла текущую страницу.
Keep*Together не помогает.
задание максимальной ширины тоже
Картинка в пост не вставляется.
https://www.dropbox.com/s/jo1d2dqd4c3nk0d/%...%D0%BA.JPG?dl=0 - ссылка на то, как должно быть.
Нужно построить отчёт, попробовав разные варианты построил на основании TfrxDBCrossView. Но возник вопрос, таблица растёт в одну сторону, т.е. после выхода кол-ва столбцов за границу страницы таблица продолжается на следующей странице, а хотелось бы, чтобы таблица сперва заполняла текущую страницу.
Keep*Together не помогает.
задание максимальной ширины тоже
Картинка в пост не вставляется.
https://www.dropbox.com/s/jo1d2dqd4c3nk0d/%...%D0%BA.JPG?dl=0 - ссылка на то, как должно быть.
Комментарии
Я делал такое через скрипт. Возможно можно сделать изящнее, но я не профессиональный программист, по крайней мере работает.
const
MIN_COLUMNWD = 54; //Ширину простой колонки принимаем 54 пикселя
MAX_ALLHEADERWD = 1458; // Максимальная ширина всех заголовков
...
procedure DBCross1OnBeforePrint(Sender: TfrxComponent);
var
CulcColWidth: Extended;
begin
{ этот код будет работать только на втором проходе }
if GroupCount>0 then begin
PageWidth:=Engine.PageWidth;
CurrentDBCross := TfrxDBCrossView(Sender);
HeaderColumnCount := CurrentDBCross.RowLevels;
{Определяем ширину колонок как если уместить все колонки на полстраницы}
CulcColWidth := (PageWidth/2/GroupCount);
if CulcColWidth < MIN_COLUMNWD then
ColumnWidth := MIN_COLUMNWD
else
ColumnWidth := Trunc(CulcColWidth);
TotalColumnWidth := ColumnWidth * 1.1;
AllColumnsWidth := (ColumnWidth*(GroupCount-1)) + TotalColumnWidth;
AllHeadersWidth := Trunc(PageWidth - AllColumnsWidth - 1);
//if AllHeadersWidth>MAX_ALLHEADERWD then AllHeadersWidth := MAX_ALLHEADERWD;
HeadWidth := Trunc(AllHeadersWidth/6)*(5-HeaderColumnCount);
{определяем окончательную ширину колонки Всего }
TotalColumnWidth := PageWidth - (HeadWidth*HeaderColumnCount) - (ColumnWidth*(GroupCount-1));
CurrentDBCross.MaxWidth := Trunc(HeadWidth);
CurrentDBCross.MinWidth := Trunc(HeadWidth);
end;
end;
procedure DBCross1OnCalcWidth(ColumnIndex: Integer; ColumnValues: Variant; var Width: Extended);
begin
{ этот код будет работать только на втором проходе }
if DBCross1.IsGrandTotalColumn(ColumnIndex)
then
Width := TotalColumnWidth
else
Width := ColumnWidth;
end;
procedure DBCross2OnAfterPrint(Sender: TfrxComponent);
begin
CurrentDBCross := TfrxDBCrossView(Sender);
GroupCount := CurrentDBCross.ColCount;
end;
Изображение того что получается.
https://yadi.sk/i/bwapNdET3Mhmes