Источник данных как параметр. Как сделать.

Обсуждение Stimulsoft Reports.WEB
slav
Сообщения: 20
Зарегистрирован: 22 ноя 2010, 12:19
Откуда: Moscow
Контактная информация:

Источник данных как параметр. Как сделать.

Сообщение 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="

Aleksey
Сообщения: 2907
Зарегистрирован: 22 апр 2010, 06:57

Источник данных как параметр. Как сделать.

Сообщение 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
Спасибо.
slav
Сообщения: 20
Зарегистрирован: 22 ноя 2010, 12:19
Откуда: Moscow
Контактная информация:

Источник данных как параметр. Как сделать.

Сообщение 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
Aleksey
Сообщения: 2907
Зарегистрирован: 22 апр 2010, 06:57

Источник данных как параметр. Как сделать.

Сообщение Aleksey »

Здравствуйте,

Вы можете использовать следующий код

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

report.Dictionary.Databases.RemoveAt(0)
...
report.Dictionary.Databases.Add(New Stimulsoft.Report.Dictionary.StiOleDbDatabase("Connection", newConnectionString))
Спасибо.
slav
Сообщения: 20
Зарегистрирован: 22 ноя 2010, 12:19
Откуда: Moscow
Контактная информация:

Источник данных как параметр. Как сделать.

Сообщение 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
Aleksey
Сообщения: 2907
Зарегистрирован: 22 апр 2010, 06:57

Источник данных как параметр. Как сделать.

Сообщение 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))

Спасибо.
slav
Сообщения: 20
Зарегистрирован: 22 ноя 2010, 12:19
Откуда: Moscow
Контактная информация:

Источник данных как параметр. Как сделать.

Сообщение 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))

Спасибо.
Алексей!
Огромное спасибо!!!! Получилось!!!
Aleksey
Сообщения: 2907
Зарегистрирован: 22 апр 2010, 06:57

Источник данных как параметр. Как сделать.

Сообщение Aleksey »


Всегда рады помочь!
Обращайтесь, если понадобится дополнительная помощь.

Спасибо.
slav
Сообщения: 20
Зарегистрирован: 22 ноя 2010, 12:19
Откуда: Moscow
Контактная информация:

Источник данных как параметр. Как сделать.

Сообщение 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)...
Aleksey
Сообщения: 2907
Зарегистрирован: 22 апр 2010, 06:57

Источник данных как параметр. Как сделать.

Сообщение Aleksey »

Здравствуйте,

Может быть не совсем поняли ваш вопрос. Можете ли немного уточнить вашу задачу.
Сам элемент на датабэнде вы не можете использовать в расчетах, вы можете использовать выражение, которое находится в нем.

Спасибо.
Ответить