Регистрация данных в Webreport

отредактировано 11:31 Раздел: FastReport .NET
Не могу разобраться, как программно передать данные в отчёт из ASP.NET.
Я работаю с данными через LINQ to SQL.
Чтобы загрузить данные в GridView я делаю так:
MyDataContext db = new MyDataContext();
string god = HttpContext.Current.Profile["year"].ToString();
// запрос к данным
IQueryable<tab1> Query=from t in db.tab1 where t.year == god;
// сохраняю в памяти
List<tab1> data = Query.ToList();
foreach (tab1 t in data)
  {
   // некая дополнительная обработка данных
  }
GridView1.DataSource = data;
GridView1.DataBind();
А как передать эти данные в WebReport ?
Предполагаю, что нужно использовать метод WebReport1.Report.RegisterDataAsp(),
но что ему передать в качестве параметра?

Комментарии

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

    Данные надо регистрировать в событии WebReport.StartReport так:
    WebReport1.Report.RegisterData(data, "MyData");
  • отредактировано 11:31
    AlexTZ написал: »
    Здравствуйте,

    Данные надо регистрировать в событии WebReport.StartReport так:
    WebReport1.Report.RegisterData(data, "MyData");

    Спасибо за быстрый ответ.
    Скажите, а то, что при этом в отчёт выводится только первая запись, это ограничение демо-версии?
  • отредактировано February 2010
    Скорее всего, бэнд "Данные" не подключен к источнику данных. Можно подключить программно, после регистрации данных:
    (WebReport1.Report.FindObject("Data1") as DataBand).DataSource = WebReport1.Report.GetDataSource("MyData");
    но лучше во время дизайна отчета иметь подключенный источник с "живыми" данными. В asp.net с этим тяжелее, чем в winforms. Возможные варианты:
    1) использовать компонент ObjectDataSource, подключать его к классу со своими данными и использовать в отчете (аналогично тому, как описано в разделе "Работа в ASP.NET/Использование компонента WebReport" руководства программиста). Данные в этом варианте не "живые".
    2) вызывать дизайнер из своего приложения (работать будет, естественно, только локально на машине разработчика). На веб-страницу кладется кнопка и пишется обработчик:
            protected void Button1_Click(object sender, EventArgs e)
            {
              Thread th = new Thread(DesignReport);
              th.SetApartmentState(ApartmentState.STA);
              th.Start();
            }
    
            private void DesignReport()
            {
              Report report = new Report();
              // register data
              report.RegisterData(...);
              // run the designer
              report.Design();
              // dispose a report
              report.Dispose();
            }
    
    Запускаете приложение, нажимаете кнопку. Вызывается дизайнер отчета, в котором уже зарегистрирован источник данных (с "живыми" данными). Создаете отчет и сохраняете его в файл. Чтобы показать отчет в WebReport, загружаете отчет из файла и пишете следующий обработчик WebReport.StartReport:
            protected void WebReport1_StartReport(object sender, EventArgs e)
            {
              // регистрируем данные точно так же, как при вызове дизайнера
              WebReport1.Report.RegisterData(...);
            }
    
    После этого кнопку и код вызова дизайнера можно убрать.
  • отредактировано 11:31
    AlexTZ написал: »
    Скорее всего, бэнд "Данные" не подключен к источнику данных. Можно подключить программно, после регистрации данных:
    (WebReport1.Report.FindObject("Data1") as DataBand).DataSource = WebReport1.Report.GetDataSource("MyData");
    Спасибо, пока ограничился этим. Этот вариант работает.

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

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