Страница 1 из 1
Замена DataSource отчёта на внешние DataTable
Добавлено: 19 июн 2009, 12:09
Serpentariy
Здравствуйте.
В Dictionary добавил Sql Connection.
Добавил два DataSource, на основе хранимых процедур, использующих этот connection.
Добавил Relation связывающий эти DataSource.
На основе этих DataSource создал и отладил отчёт типа Master-Detail.
В своём приложении хочу отобразить данный отчёт, но данные получаемые отчётом
хочу заменить на подготовленные моим приложением DataTable-ы.
Т.е. мне надо, чтобы отчёт не запрашивал данные, а использовал те, что я ему подсуну.
Можно ли это сделать, и если да, то как?
Спасибо.
Замена DataSource отчёта на внешние DataTable
Добавлено: 22 июн 2009, 05:33
Jan
Здравствуйте,
Используйте такой код:
Код: Выделить всё
report.Databases.Clear();
report.DataSources.Clear();
report.RegData("MyDataSet", dataSet);
report.Dictionary.Synchronize();
Проверьте имена которые получаются у новых источников данных. Они должны совпадать с именами удаленных источников данных. Для проверки отчета можно вызвать дизайнер отчетов после верхнего кода:
Спасибо.
Замена DataSource отчёта на внешние DataTable
Добавлено: 22 июн 2009, 06:01
Serpentariy
Ясно. То есть напрямую, не очищая источники данных в отчёте и
не создавая на клиенте необходимую структуру данных в Dataset-е,
который и будет зарегистрирован в отчёте, это невозможно.
Т.е. что то типа этого:
Код: Выделить всё
DataTable dt=new DataTable()
//Здесь заполнение DataTable-а
report.DataSources[0].DataTable=dt
Замена DataSource отчёта на внешние DataTable
Добавлено: 23 июн 2009, 11:12
Jan
Здравствуйте,
Если нужно сделать именно так, то подпишитесь на BeforePrintEvent событие первой страницы скомпилированного отчета). В этом событии можно переприсвоить DataTable свойство источника данных.
Спасибо.
Замена DataSource отчёта на внешние DataTable
Добавлено: 14 июл 2009, 10:10
Master
Пользовался версией 2008.2.
Код там был таковым:
Код: Выделить всё
protected void InitializeReport()
{// Инициализация отчёта
stiReport.Load(Application.StartupPath + m_strPathReport);
stiReport.Compile();
stiReport[REP_HEADER_REPORT] = m_strHeadingReportData + " в организации " + tscbNameCompany.ComboBox.Text + ".";
stiReport.RegData(m_ds);
}
Обновли версию компонента до 2009.1. Всё работало, пока я не залез и не изменил(обновил) источники данных, как это описывал
Serpentariy.
Теперь код таковой:
Код: Выделить всё
protected void InitializeReport()
{// Инициализация отчёта
stiReport.Load(Application.StartupPath + m_strPathReport);
//Удаляем предыдущие DataSet
stiReport.DataSources.Clear();
stiReport.RegData("NewDataSet", m_ds);
stiReport.Dictionary.Synchronize();
stiReport.Compile();
stiReport[REP_HEADER_REPORT] = m_strHeadingReportData + " в организации " + tscbNameCompany.ComboBox.Text + ".";
}
Замена DataSource отчёта на внешние DataTable
Добавлено: 14 июл 2009, 10:24
Master
Есть один вопрос.
У меня в представлении vw_zrep_InfoPeopleChildrenAge есть поля: CompanyID, CompanyName, Fio, SubJobTitle, Department и Age.
Я ему даю такой запрос:
Код: Выделить всё
SELECT CompanyID,CompanyName,FIO,SubJobTitle,Department, COUNT(*) AS QuantityChildren
FROM vw_zrep_InfoPeopleChildrenAge
WHERE 1=1 AND CompanyID=1
GROUP BY CompanyID,CompanyName,FIO,SubJobTitle,Department
в строке
получаю ошибку:
Код: Выделить всё
c:\Temp\twgyjkon.0.cs(85,46) : error CS0117: 'Reports.Отчет.TableDataSource' does not contain a definition for 'Fio'
Замена DataSource отчёта на внешние DataTable
Добавлено: 14 июл 2009, 18:12
Jan
Здравствуйте,
Судя по всему, где то в выражении используется поле Fio. В запросе поле записано как FIO. Для c# компилятора это разные идентификаторы.
Спасибо.