Проблема при печати нескольких объектов Tableobject

отредактировано 11:41 Раздел: FastReport .NET
Здравствуйте.
В редакторе поместил в отчет два TableObject. У одного определил событие ManualBuild. При попытке отчета ошибка:
FastReport.Net v1.0.186
Object reference not set to an instance of an object.
   at FastReport.Table.TableResult.Da7BVyvHy(Object , EventArgs )
   at FastReport.ReportComponentBase.OnAfterPrint(EventArgs e)
   at FastReport.BandBase.RestoreState()
   at FastReport.Engine.ReportEngine.sRnVEJosH(BandBase , Boolean )
   at FastReport.Engine.ReportEngine.YrX10rFDT(BandBase , Boolean )
   at FastReport.Engine.ReportEngine.YQtjsWs2kc()
   at FastReport.Engine.ReportEngine.TQRj2XOGC4(ReportPage )
   at FastReport.Engine.ReportEngine.QiQjYCscAf()
   at FastReport.Engine.ReportEngine.CVfOwygLd(Boolean , Boolean , ReportPage )
   at FastReport.Report.Prepare(Boolean append)
   at FastReport.Report.Prepare()
   at 6GpXXagCXhQg5Q10bPn.oqS3Zkg2rO9oSanDUfQ.ihJ5XfikZ()
При печати только одногоTableObject такого не происходит. Версия: 1.0.186.0

Комментарии

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

    Оба объекта поместили на один бэнд?
  • отредактировано 11:41
    AlexTZ написал: »
    Здравствуйте,

    Оба объекта поместили на один бэнд?
    Да
  • отредактировано April 2009
    При печати объектов "Таблица" существуют ограничения: таблицы, расположенные на одном бэнде, должны печататься одинаковым способом (либо статически, либо динамически). Вам надо разнести таблицы по разным бэндам, либо вторую таблицу также печатать с помощью ManualBuild.
  • отредактировано 11:41
    AlexTZ написал: »
    При печати объектов "Таблица" существуют ограничения: таблицы, расположенные на одном бэнде, должны печататься одинаковым способом (либо статически, либо динамически). Вам надо разнести таблицы по разным бэндам, либо вторую таблицу также печатать с помощью ManualBuild.
    Мне вообще-то три таблицы нужно будет напечатать "вручную" с помощью ManualBuild. Это возможно? Вам не кажется, что это все таки ошибка?
  • отредактировано 11:41
    Забыл добавить: три на одном бенде.
  • отредактировано 11:41
    Хоть десять, при условии, что все печатаются с помощью manualbuild.
  • отредактировано 11:41
    Ошибку "object reference" поправлю, но статические таблицы с динамическими все равно будут печататься неправильно (если динамическая таблица растет вширь).
  • отредактировано 11:41
    Спасибо.

    Вот еще проблема. При печати нескольких TableObject на одном бенде они меняют расположение (располагаются в одну линию):
    <?xml version="1.0" encoding="utf-8"?>
    <Report ReportInfo.Created="04/02/2009 11:19:30" ReportInfo.Modified="04/02/2009 11:22:08" ReportInfo.CreatorVersion="1.0.186.0">
      <scriptText>using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Data;
    using FastReport;
    using FastReport.Data;
    using FastReport.Dialog;
    using FastReport.Barcode;
    using FastReport.Table;
    using FastReport.Utils;
    
    namespace FastReport
    {
      public class ReportScript
      {
    
        private void Table1_ManualBuild(object sender, EventArgs e)
        {
          Table1.PrintRow(0);
          Table1.PrintColumn(0);
    
          Table1.PrintRow(1);
          Table1.PrintColumn(0);
        }
    
        private void Table2_ManualBuild(object sender, EventArgs e)
        {
          Table2.PrintRow(0);
          Table2.PrintColumn(0);
    
          Table2.PrintRow(1);
          Table2.PrintColumn(0);
        }
      }
    }
    </ScriptText>
      <Dictionary/>
      <ReportPage Name="Page1">
        <ReportTitleBand Name="ReportTitle1" Width="718.2" Height="245.7">
          <TableObject Name="Table1" Left="28.35" Top="18.9" Width="66.15" Height="37.8" ManualBuildEvent="Table1_ManualBuild">
            <TableColumn Name="Column1"/>
            <TableRow Name="Row1">
              <TableCell Name="Cell1" Text="Dates"/>
            </TableRow>
            <TableRow Name="Row2">
              <TableCell Name="Cell6"/>
            </TableRow>
          </TableObject>
          <TableObject Name="Table2" Left="103.95" Top="75.6" Width="66.15" Height="37.8" ManualBuildEvent="Table2_ManualBuild">
            <TableColumn Name="Column6"/>
            <TableRow Name="Row6">
              <TableCell Name="Cell26" Text="Orders"/>
            </TableRow>
            <TableRow Name="Row7">
              <TableCell Name="Cell31"/>
            </TableRow>
          </TableObject>
        </ReportTitleBand>
      </ReportPage>
    </Report>
    
    Есть ли способ этого избежать? Как изменить положение нижней таблицы, если размер верхней неизвестен и она может быть довольно большой?
  • отредактировано 11:41
    Вот еще раз напечатал. Вторая таблица оказалась на второй странице внутри первой (первая довольно большая). Третья вообше на четвертой странице после всех таблиц. Пробовал выставлять свойство Restrictions в DontMove - не помогает.
  • отредактировано 11:41
    Блин, Restrictions только для дизайнера.
  • отредактировано 11:41
    То, что Вы хотите, невозможно. Вторая таблица при печати учитывает только ширину первой, но не высоту. Задача печати динамической таблицы довольно сложная, отсюда и ограничения на размещение и способы печати.
  • отредактировано 11:41
    Если поместить таблицы вплотную к первой, то более-менее результат нормальный (при условии, что первая в ширину меньше, чем страница плюс ширина двух других):
    <?xml version="1.0" encoding="utf-8"?>
    <Report ReportInfo.Created="04/02/2009 12:06:36" ReportInfo.Modified="04/02/2009 12:12:13" ReportInfo.CreatorVersion="1.0.186.0">
      <scriptText>using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Data;
    using FastReport;
    using FastReport.Data;
    using FastReport.Dialog;
    using FastReport.Barcode;
    using FastReport.Table;
    using FastReport.Utils;
    
    namespace FastReport
    {
      public class ReportScript
      {
    
        private void Table1_ManualBuild(object sender, EventArgs e)
        {
          Table1.PrintRow(0);
          Table1.PrintColumn(0);
    
          for (int i = 0; i < 5; i++)
          {
            Table1.PrintColumn(1);
          }
        }
    
        private void Table2_ManualBuild(object sender, EventArgs e)
        {
          Table2.PrintRow(0);
          Table2.PrintColumn(0);
    
          for (int i = 0; i < 5; i++)
          {
            Cell10.Text = i.ToString();
            Table2.PrintRow(1);
            Table2.PrintColumn(0);
          }
    
          for (int i = 0; i < 40; i++)
          {
            Cell6.Text = i.ToString();
            Table1.PrintRow(0);
            Table1.PrintColumn(0);
          }
        }
    
        private void Table3_ManualBuild(object sender, EventArgs e)
        {
          Table3.PrintRow(0);
          Table3.PrintColumn(0);
    
          for (int i = 0; i < 5; i++)
          {
            Cell14.Text = i.ToString();
            Table3.PrintRow(1);
            Table3.PrintColumn(0);
          }
        }
      }
    }
    </ScriptText>
      <Dictionary/>
      <ReportPage Name="Page1">
        <ReportTitleBand Name="ReportTitle1" Width="718.2" Height="368.55">
          <TableObject Name="Table1" Left="9.45" Top="113.4" Width="132.3" Height="37.8" ManualBuildEvent="Table1_ManualBuild">
            <TableColumn Name="Column1"/>
            <TableColumn Name="Column2"/>
            <TableRow Name="Row1">
              <TableCell Name="Cell1" Fill.Color="LemonChiffon" Text="Header"/>
              <TableCell Name="Cell2" Fill.Color="LemonChiffon" Text="R->X"/>
            </TableRow>
            <TableRow Name="Row2">
              <TableCell Name="Cell6" Fill.Color="LemonChiffon" Text="Row"/>
              <TableCell Name="Cell7" Fill.Color="LemonChiffon"/>
            </TableRow>
          </TableObject>
          <TableObject Name="Table2" Left="160.65" Top="18.9" Width="132.3" Height="37.8" ManualBuildEvent="Table2_ManualBuild">
            <TableColumn Name="Column3" Width="132.3"/>
            <TableRow Name="Row3">
              <TableCell Name="Cell8" Fill.Color="WhiteSmoke" Text="Orders"/>
            </TableRow>
            <TableRow Name="Row4">
              <TableCell Name="Cell10" Fill.Color="WhiteSmoke" Text="Order"/>
            </TableRow>
          </TableObject>
          <TableObject Name="Table3" Left="302.4" Top="18.9" Width="113.4" Height="37.8" ManualBuildEvent="Table3_ManualBuild">
            <TableColumn Name="Column5" Width="113.4"/>
            <TableRow Name="Row5">
              <TableCell Name="Cell12" Fill.Color="LightCoral" Text="Dates"/>
            </TableRow>
            <TableRow Name="Row6">
              <TableCell Name="Cell14" Fill.Color="LightCoral" Text="Date"/>
            </TableRow>
          </TableObject>
          <TextObject Name="Text1" Left="9.45" Top="75.6" Width="94.5" Height="18.9" Fill.Color="LemonChiffon" Text="1"/>
          <TextObject Name="Text2" Left="160.65" Width="94.5" Height="18.9" Fill.Color="LemonChiffon" Text="2"/>
          <TextObject Name="Text3" Left="302.4" Width="94.5" Height="18.9" Fill.Color="LemonChiffon" Text="3"/>
        </ReportTitleBand>
      </ReportPage>
    </Report>
    
    Но все равно первая меняет расположение по вертикали. Это же ненормально.
  • отредактировано 11:41
    Таковы ограничения. Если нужно печатать таблицы не только рядом, но и друг под другом, единственный способ сделать это - использовать одну большую объединенную таблицу.
  • отредактировано 11:41
    А на будущее? Если будет, то какие сроки. Пока очень сложно получить отчеты какие нужно.
  • отредактировано 11:41
    Какого вида отчет Вы хотите получить?
  • отредактировано 11:41
    AlexTZ написал: »
    Какого вида отчет Вы хотите получить?
    Например, кросс-отчет с группировкой. Или такой, как в предыдущем посте: с тремя таблицами в одном банде, чтобы расположение было правильное (расположение таблиц само меняется сейчас).
  • отредактировано 11:41
    Про кросс-отчет с группировкой: можно матрицу использовать, уже посмотрел.

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

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