Работа с Datasource отчета из кода

dsvdsv
отредактировано 02:32 Раздел: FastReport .NET
Здравствуйте!
Возникли проблемы с работой с источниками данных из кода.

Ситуация следующая:
1. Есть база данных. Делаем в дизайнере отчет, источником выступает таблица БД.
2. В софте есть класс, описывающий эту таблицу (поля называются одинаково).
3. Пользователь запускает софт, данные загружаются из таблицы БД в память (список классов)
4. Пользователь редактирует данные (добавляет, удаляет записи) и хочет просмотреть что получается в отчете (данные надо взять из памяти).

Вот здесь и возникает проблема. Как в отчете удалить привязку к БД и привязать отчет к списку в памяти?

Спасибо.

Комментарии

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

    Надо вместо имеющегося в отчете источника данных зарегистрировать новый с таким же именем и набором полей. Попробуйте так:
    // читаем отчет из файла
    report.Load(...);
    // очищаем источники данных
    report.Dictionary.DataSources.Clear();
    // регистрируем новый источник с тем же именем
    report.RegisterData(businessObject, "Categories");
    // разрешаем его использование в отчете
    DataSourceBase datasource = report.GetDataSource("Categories");
    datasource.Enabled = true;
    // подключаем бэнд "Данные" к новому источнику
    (report.FindObject("Data1") as DataBand).DataSource = datasource;
    
  • dsvdsv
    отредактировано 02:32
    Здравствуйте.

    Вот исходный код:

    List<Emp> list = new List<Emp>();
    list.Add(new Emp() { Id = "Id1", Name = "Name1" });
    list.Add(new Emp() { Id = "Id2", Name = "Name2" });
    list.Add(new Emp() { Id = "Id3", Name = "Name3" });
    list.Add(new Emp() { Id = "Id4", Name = "Name4" });
    list.Add(new Emp() { Id = "Id5", Name = "Name5" });

    Report report = new Report();
    report.Load(@d:\Test1.frx);
    report.Dictionary.DataSources.Clear();
    report.RegisterData(list, "Data");
    DataSourceBase datasource = report.GetDataSource("Data");
    datasource.Enabled = true;
    (report.FindObject("Data1") as DataBand).DataSource = datasource;

    report.Design();

    Почему то report.Dictionary.DataSources.Count = 0

    Вместо
    report.Dictionary.DataSources.Clear();
    написал
    report.Dictionary.Connections.Clear();

    Все заработало.
    Еще вопрос: в дизайнере таблица БД отображается под узлом Connection, значит она будет не видна в report.Dictionary.DataSources.?


  • отредактировано 02:32
    Да, насчет report.Dictionary.Connections.Clear() Вы правы. В коллекции report.Dictionary.DataSources есть только источники, зарегистрированные из приложения. Источники, добавленные в меню "Данные/Новый источник данных", "живут" внутри своего Connection.
  • dsvdsv
    отредактировано 02:32
    Спасибо за оперативный ответ.

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

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