Страница 2 из 3
Источник данных как параметр. Как сделать.
Добавлено: 14 дек 2010, 10:32
slav
Наконец-то нашлось время заняться источниками данных.
В процессе работы над шаблоном отчета и обдумыванием всего веб-интерфейса стало понятно, что нужно сделать.
1. Осуществить выбор нужной базы данных с помощью элемента treeview -
сделано.
2. После выбора базы осуществить заполнение dropdownlist используя SELECT DISTINCT [StringTime] FROM [GOST13109 - Flicker] WHERE ([StringTime] IS NOT NULL) ORDER BY [StringTime] -
сделано.
3. Передать в генерируемый отчет параметр из dropdownlist -
сделано.
4. Изменить строку подключения в описании datasource в соответствии с выбранной на treeview базе данных. -
не сделано.
Помогите, пожалуйста, а то уже голова кругом от прочтения форума...
В программе строка соединения формируется вот так
Код: Выделить всё
Dim appDir = HttpContext.Current.Server.MapPath(String.Empty)
Dim sConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & appDir + TreeView1.SelectedNode.Target & " ;" & _
"User ID=Admin;" & _
"Password="
Источник данных как параметр. Как сделать.
Добавлено: 15 дек 2010, 09:56
Aleksey
Здравствуйте,
Вы можете использовать следующий код:
Код: Выделить всё
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim appDir = HttpContext.Current.Server.MapPath(String.Empty)
Dim sConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=e:\DATA\NWIND.MDB;" & _
"User ID=Admin;" & _
"Password="
Dim report As StiReport = New StiReport()
report.Load("e:\samplereport.mrt")
'Clear dictionary
report.Dictionary.Clear()
'add Connection
report.Dictionary.Databases.Add(New Stimulsoft.Report.Dictionary.StiOleDbDatabase("Connection", sConnString))
'Add DataSources:
Dim DataSource1 As StiOleDbSource = New StiOleDbSource("Connection", "DS1", "DS1", "SELECT * FROM PRODUCTS", True, False)
report.Dictionary.DataSources.Add(DataSource1)
'Add Columns:
Dim dataTable1 As DataTable = New DataTable("Table01")
Dim connections As OleDbConnection = New OleDbConnection(sConnString)
Dim adapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM PRODUCTS", connections)
adapter.Fill(dataTable1)
For Each col As DataColumn In dataTable1.Columns
DataSource1.Columns.Add(col.ColumnName, col.DataType)
Next
StiWebDesigner1.Design(report)
End Sub
Спасибо.
Источник данных как параметр. Как сделать.
Добавлено: 15 дек 2010, 11:01
slav
хм. уточню.
я хочу в словаре отчета фактически заменить источник данных (т.к. у меня много баз данных с одинаковой структурой)
в словаре есть такой раздел
Код: Выделить всё
PM175_test
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\ReportServer\App_Data\Kuznechiha_01.mdb;Persist Security Info=False
PM175_test
False
как я могу программно (из кода страницы) изменять вот эту строчку словаря.
Код: Выделить всё
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\ReportServer\App_Data\Kuznechiha_01.mdb;Persist Security Info=False
Источник данных как параметр. Как сделать.
Добавлено: 16 дек 2010, 04:14
Aleksey
Здравствуйте,
Вы можете использовать следующий код
Код: Выделить всё
report.Dictionary.Databases.RemoveAt(0)
...
report.Dictionary.Databases.Add(New Stimulsoft.Report.Dictionary.StiOleDbDatabase("Connection", newConnectionString))
Спасибо.
Источник данных как параметр. Как сделать.
Добавлено: 17 дек 2010, 05:15
slav
Спасибо за предложенный вариант.
Но что-то он у меня никак не хочет работать.
Суть эксперимента такова.
Есть в отчете 2 подключения.
OleDB и xml
В словаре они описаны так
Код: Выделить всё
PM175_test
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\ReportServer\App_Data\Kuznechiha_01.mdb;Persist Security Info=False
PM175_test
False
NormGarmoniki
NormGarmoniki
C:\Inetpub\wwwroot\ReportServer\App_Data\Norm.xml
C:\Inetpub\wwwroot\ReportServer\App_Data\Norm.xsd
когда я применяю конструкцию для xml - источника
Код: Выделить всё
Report.Dictionary.Databases.RemoveAt(1)
Dim Xml_Source As New StiXmlDatabase("TestGarm", "C:\Inetpub\wwwroot\ReportServer\App_Data\Norm.xsd", "C:\Inetpub\wwwroot\ReportServer\App_Data\Norm.xml")
Report.Dictionary.Databases.Add(Xml_Source)
то все ок.
когда аналогичную конструкцию применяю к OleDb получаю пустой отчет, без таблиц, которые должны заполнятся данными по OleDB.
где собака порылась?
Прошу прощения, что терзаю Вас возможно простыми вопросами.
У меня пока еще не большой опыт программирования под ASP.NET на VB.net. Раньше в основном VBA под MS Office
По ссылке можно весь проект скачать и посмотреть.
Link
Источник данных как параметр. Как сделать.
Добавлено: 17 дек 2010, 10:07
Aleksey
Здравствуйте,
В данном случае у вас получается, что отчет (Отчет.mrt) имеет OleDb Соединения - Name = PM175_test, при замене из кода вы добавляете с именем "ConnExample".
Попробуйте заменить в своем коде
Report.Dictionary.Databases.Add(New Stimulsoft.Report.Dictionary.StiOleDbDatabase("ConnExample", "ConnExample", sConnString, False))
на следующую
Report.Dictionary.Databases.Add(New Stimulsoft.Report.Dictionary.StiOleDbDatabase("PM175_test", "PM175_test", sConnString, False))
Спасибо.
Источник данных как параметр. Как сделать.
Добавлено: 17 дек 2010, 10:11
slav
Aleksey писал(а):Здравствуйте,
В данном случае у вас получается, что отчет (Отчет.mrt) имеет OleDb Соединения - Name = PM175_test, при замене из кода вы добавляете с именем "ConnExample".
Попробуйте заменить в своем коде
Report.Dictionary.Databases.Add(New Stimulsoft.Report.Dictionary.StiOleDbDatabase("ConnExample", "ConnExample", sConnString, False))
на следующую
Report.Dictionary.Databases.Add(New Stimulsoft.Report.Dictionary.StiOleDbDatabase("PM175_test", "PM175_test", sConnString, False))
Спасибо.
Алексей!
Огромное спасибо!!!! Получилось!!!
Источник данных как параметр. Как сделать.
Добавлено: 17 дек 2010, 10:21
Aleksey
Всегда рады помочь!
Обращайтесь, если понадобится дополнительная помощь.
Спасибо.
Источник данных как параметр. Как сделать.
Добавлено: 22 дек 2010, 12:26
slav
Aleksey писал(а):
Всегда рады помочь!
Обращайтесь, если понадобится дополнительная помощь.
Спасибо.
Позвольте воспользоваться вашей добротой еще раз.
Есть дикий запрос вида
Код: Выделить всё
select [%HD02 max1] as Data, StringTime from [GOST13109 - V1 Harmonic Distortion] where Stringtime = @St_var
Union all select [%HD03 max1] as Data, StringTime from [GOST13109 - V1 Harmonic Distortion] where Stringtime = @St_var
...
Union all select [%HD40 max1] as Data, StringTime from [GOST13109 - V1 Harmonic Distortion] where Stringtime = @St_var
в результате получаем столбик чисел от %HD02 max1 до %HD40 max1 (всего 39 чисел)
размещаем их в датабэнд вида
| column 1 | column 2 | column 3 | column 4 |
При этом column 1, 2, 3 заполняются из запросов, аналогичных приведенному
Column 4 является расчетным на основании данных в 1, 2, 3.
Вопрос.
Можно ли как-то обратиться к элементу датабэнда, чтобы использовать его в расчетах?
что-то типа column1.item(2)...
Источник данных как параметр. Как сделать.
Добавлено: 23 дек 2010, 05:19
Aleksey
Здравствуйте,
Может быть не совсем поняли ваш вопрос. Можете ли немного уточнить вашу задачу.
Сам элемент на датабэнде вы не можете использовать в расчетах, вы можете использовать выражение, которое находится в нем.
Спасибо.