Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Связывание ReportViewer'a и DataTable'a


Автор: #Sage 19.4.2006, 00:54
Hi2All!

В процессе работы программы создаётся DataView:
Код
DataView dw = new DataView(BlaBlaDataSet.Tables["BlaTable"]);
dw.RowFilter = "object='BlaObject'";


Далее, при помощи метода ToTable() класса DataView я получаю из созданного ранее представления DataTable:
Код
DataTable tempDT = dw.ToTable("Sage", true, "id", "bla_id", "bla_quantity");


Теперь, когда получен DataTable с нужными мне данными, хотелось бы сгенерировать report (на форме уже есть ReportView'er).  Ну, и собсвенно сам вопрос: как отобразить/связать мой DataTable с ReportViewer'ом динамически, во время исполнения программы? (Проще говоря, у меня есть DataTable и всё что нужно сделать это отобразить все данные из этого DataTable'a в ReportViewer'e)

 

Автор: mr.DUDA 24.4.2006, 10:58
А что за ReportViewer такой ? 

Автор: #Sage 25.4.2006, 10:30
В Студии 2005 контрол новый такой. Cильно урезанный клон Crystal Reports, но мне он как раз подходит. Работать с ним просто, на стадии разработки задать поля талиц/фильтр для отображения не сложно. Проблема возникла с динамической привязкой DataTable к этому ReportViewer'у. Т.е. чтоб я фильтровал записи в DataTable, а ReportViewer его только отобразил. Листал MSDN. Долго. Но там молчат... 

Автор: -ser- 26.4.2006, 06:12
ReportViewer работает в связке с DataSource + ReportDocument

Первое все знают что это такое, а что есть ReportDocument?

 Это файл *.rdlc, описывающий расположение твоего документа в самом Viewere. По сути это xml файл.

в дизайнере рисуешь как надо свой репорт, сохраняешь проект и у тебя в каталоге проекта появляется файл *.rdlc (например Report1.rdlc). 

тебе надо записать этот файл *.rdlc в рабочий каталог клиенту. без него вьюер не знает как именно расположить твой репорт.

динамически можем показать так
Код

reportViewer1.LocalReport.DataSources.Add( new Microsoft.Reporting.WinForms.ReportDataSource( 
"название в теге DataSet Name в файле Report1.rdlc "), dataSet.Tables[ 0 ] );
// пишем, откуда читать расположение документа
reportViewer1.LocalReport.ReportPath = "Report1.rdlc";
reportViewer1.RefreshReport();


вот и все дела! 
если что непонятно, пиши. я бы рекомендовал в самом начале загнать таблицу в DataSet, и работать уже с ним. может и можно напрямую с таблицей, я не пробовал. 

  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)