Страница 1 из 1

Web Report Designer - как программно загрузить дерево таблиц с SQL Server

Добавлено: 26 авг 2010, 20:51
Vasiliy Goncharenko
Web Report Designer 2010.1
VB.Net

Идея: дать пользователю словарь с фиксированной структурой и запретить редактирование, чтоб исключить соблазн испортить словарь.
Как программно загрузить дерево таблиц со связями из SQL Server?

Детали:
При создании нового отчета в дизайнере, или открытии существующего, нужно показывать в словаре полный список доступных таблиц с Relations, по аналогии с Business Objects, чтоб пользователь не создавал источники данных ручками.
Структура со всеми связями и вложенными таблицами красиво отображается когда загрузка данных идет через XML, но при загрузке через StiSqlSource у меня не получается одним вызовом загрузить всю структуру таблиц и связей между таблицами.

Идеально было-бы:
Dim MyReport_DS As New StiSqlSource( ' Здесь определить полное дерево таблиц со связями
MyReport.Dictionary.DataSources.Add(MyReport_DS) ' Здесь загрузить это самое дерево таблиц со связями

Спасибо.

Web Report Designer - как программно загрузить дерево таблиц с SQL Server

Добавлено: 27 авг 2010, 08:12
Vladimir
Здравствуйте,

Вы всё верно описали, приведя правильный код. После этого остаётся только вызвать дизайнер отчётов:

Код: Выделить всё

StiWebDesigner1.Design(MyReport)

Для того, что бы запретить редактировать словарь данных, используйте указанную статическую опцию:

Код: Выделить всё

StiWebDesignerOptions.ModifyDictionary = false
Спасибо.

Web Report Designer - как программно загрузить дерево таблиц с SQL Server

Добавлено: 27 авг 2010, 08:15
Vladimir
Здравствуйте,

Вы всё верно описали, приведя правильный код. После загрузки словаря данных в отчёт (любым способом), остаётся только вызвать дизайнер отчётов:

Код: Выделить всё

StiWebDesigner1.Design(MyReport)

Для того, что бы запретить редактировать словарь данных, используйте указанную статическую опцию:

Код: Выделить всё

StiWebDesignerOptions.ModifyDictionary = false
Спасибо.

Web Report Designer - как программно загрузить дерево таблиц с SQL Server

Добавлено: 27 авг 2010, 11:19
Vasiliy Goncharenko
Спасибо за скорый ответ.

С таким вызовом у меня получается добавить только одну таблицу:

Например:
Dim MyReport_DS As New StiSqlSource("EazyQA_Aces", "Tickets", "Tickets", "SELECT * FROM dbo.V_QA_Tickets", True, False)
MyReport.Dictionary.DataSources.Add(MyReport_DS)

А как мне в этом вызове добавить группу таблиц вместе со связями (relations)?

Спасибо

Web Report Designer - как программно загрузить дерево таблиц с SQL Server

Добавлено: 28 авг 2010, 06:50
Aleksey
Здравствуйте,

Таблицы:

Код: Выделить всё

Dim report As New StiReport()
StiWebDesignerOptions.ModifyDictionary = False
Dim reportDS_Products As New StiSqlSource("SQL", "Products", "Products", "SELECT * FROM Products", True, False)
Dim reportDS_Categories As New StiSqlSource("SQL", "Categories", "Categories", "SELECT * FROM Categories", True, False)
Колонки:

Код: Выделить всё

For Each col As DataColumn In dtProducts.Columns
     reportDS_Products.Columns.Add(col.ColumnName, col.DataType)
Next
For Each col As DataColumn In dtCategories.Columns
     reportDS_Categories.Columns.Add(col.ColumnName, col.DataType)
Next
Связи:

Код: Выделить всё

Dim dataRelation As New StiDataRelation("MyRelation", report.Dictionary.DataSources("Categories"), report.Dictionary.DataSources("Products"), New System.String() {"CategoryID"}, New System.String(){"CategoryID"})
report.Dictionary.RegRelations()
report.Dictionary.Relations.Add(dataRelation)
Спасибо.

Web Report Designer - как программно загрузить дерево таблиц с SQL Server

Добавлено: 29 авг 2010, 06:35
Vasiliy Goncharenko
Ага, работает, спасибо.

Web Report Designer - как программно загрузить дерево таблиц с SQL Server

Добавлено: 29 авг 2010, 17:35
Andrew
Отлично!