Проблем: Не изменяется отчет при изменениях данных

отредактировано 11:57 Раздел: FastReport 3.0
Есть простой отчет, где в мастердате выводятся поля (через dataset). При первом вызове все происходит исключительно великолепно, все показывается что надо, но вот при последующих (когда меняются данные dataset), отчет продолжает выдавать то, что он показал в первый раз. Как с этим бороться? Чистить MasterData? Как?

Комментарии

  • отредактировано 11:57
    Еслия правильно понял вашу проблему, то так: frxReport1.Shoreport(true)
  • отредактировано 11:57
    Увы, эти способы перепробованы. У ShowReport() нет параметров, а
    report.PrepareReport(true);
    report.ShowPreparedReport();
    не помогает. Формирую репорт и показываю так:
    TfrxReportClass report;
    DataTable dataset;
    report = new TfrxReportClass();
    dataset = new FrxDataTable("DemoDataset");
    dataset.Clear();
    //тут забивается dataset
    dataset.AcceptChanges();
    report.LoadReportFromFile(reportname);
    report.PrepareReport(true);
    report.ShowPreparedReport();

    Вместо последних двух строчек пробовал и просто
    report.ShowReport()
    Одинаково... Я сейчас уже офигею, блин. ;) Помогите...
  • отредактировано 11:57
    Хотелось бы посмотреть конкретный пример.
  • отредактировано 11:57
    Вот вся процедура полностью (C#)... К загрузке из файла dataset подходит в оптимальном составе, в смысле, в ней содержится то, что надо... А вот в отчете совершенно другая, но до боли знакомая картина)

    private void ShowReport(DataView view, DataColumnCollection columns, string reportname)
    {
    TfrxReportClass report;
    DataTable dataset;
    report = new TfrxReportClass();
    dataset = new FrxDataTable("DemoDataset");
    dataset.Clear();
    foreach (DataColumn column in columns)
    {
    dataset.Columns.Add(column.Caption.ToString(), typeof(string));
    }
    for (int j=0; j<view.Count; j++)
    {
    DataRow newrow = dataset.NewRow();
    for(int i=0; i<columns.Count; i++)
    {
    newrow = view[j];
    }
    dataset.Rows.Add(newrow);
    }
    dataset.AcceptChanges();
    report.LoadReportFromFile(reportname);
    report.ShowReport();
    }
  • almanalman космополит
    отредактировано October 2005
    проблема в том, что Вы динамически создаёте FrxDataTable при каждом вызове вот этой функции:

    private void ShowReport(DataView view, DataColumnCollection columns, string reportname)
    .
  • almanalman космополит
    отредактировано October 2005
    Поскольку в среде .NET объекты удаляются сборщиком мусора, то некоторое время копия FrxDataTable ещё "живёт". Всё бы ничего, да движок FastReport использует единое пространство имён для всех объектов данных в контексте задачи.

    Соответственно, при следующем вызове ShowReport, FR движок выбирает первый зарегистрированный датасет с соответствущюим именем.

    Существует 3 способа решения проблемы:
    1-й: Создавать датасет в конструкторе класса.
    2-й: Принудельно удалять объект перед выходом из функции, которая его создала.
    3-й: Не создавать датасеты с одинаковым именем.
  • отредактировано 11:57
    Спасибо!!!! Вы мой спаситель и благодетель, не знаю, как и благодарить. Самое смешное, что я поместил вызов конструктора в процедуру, чтобы ПОБОРОТЬ привентивно эту проблему, а она его именно и создала!!! ;) Все отлично работает, спасибо дополнительное за объяснения, почему это так происходит...

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

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