最佳解答者
有關 ReportViewer 問題

問題
-
我使用「報表產生器3.0」建立了一個名叫test.rdl 存在 D碟下
在 vs2012 express 環境 window form 使用工具箱拉了一個 ReportViewer在上面
想請教一些問題:
1.在D碟下直接按test.rdl時都會先啟動「報表產生器3.0」,有沒有辦法將test.rdl轉換成個別執行檔(不去啟動報表產生器)
2.window form 裡 ReportViewer屬性
ReportServerUrl 不知要如何設置 ?
例如:http://localhost/ReportServer
//localhost/ 指的是 ? 假設我的電腦名稱pcserver(進入sqlserver裡面-->查屬性~跟電腦名稱一樣),
ReportServer指的是? (我「報表產生器3.0 」路徑是:"C:\Program Files (x86)\Microsoft SQL Server\Report Builder 3.0\MSReportBuilder.exe")
a. ReportServerUrl=https://pcserver/Program Files (x86)\Microsoft SQL Server\Report Builder 3.0\MSReportBuilder.exe 這樣對嗎?
b. 會出現無法連接至遠端伺服器 (會用到80 port) 一定要加裝IIS嗎? ]
3.我試了另一種方式將 ReportServerUrl設空白Private Sub ReportViewer1_Load(sender As Object, e As EventArgs) Handles ReportViewer1.Load sqlconn() Dim da As New OleDb.OleDbDataAdapter Dim sql_str As New OleDb.OleDbCommand("select * FROM where .....", conn) Dim aa As New DataTable da.SelectCommand = sql_str da.Fill(aa) Dim bs As New BindingSource bs.DataSource = aa Try Dim rds As New Microsoft.Reporting.WinForms.ReportDataSource("angel_invoice_set", aa) Me.ReportViewer1.LocalReport.ReportPath = "D:\aa.rdl" Me.ReportViewer1.LocalReport.DataSources.Clear() Me.ReportViewer1.LocalReport.DataSources.Add(rds) Me.ReportViewer1.RefreshReport() MessageBox.Show("step1") Catch ex As Exception MsgBox(ex.Message) End Try conn.Close() End Sub
出現 step1 完後出現一個空白的 ReportViewer
同時會出現尚未指定報表定義的來源(路徑都有檢查正確)之錯誤訊息
不知是哪裡出問題,麻煩幫忙,謝謝
解答
所有回覆
-
1) 使用滑鼠右鍵點中test.rdl, 執行[開啟檔案 | 選取預設程式]功能, 再選擇喜好的預設程式
2) 您可以看一下這篇文件, 以了解Local Report與Server Report的用法:ReportViewer顯示LocalReport及ServerReport
-
1) 使用滑鼠右鍵點中test.rdl, 執行[開啟檔案 | 選取預設程式]功能, 再選擇喜好的預設程式
2) 您可以看一下這篇文件, 以了解Local Report與Server Report的用法:ReportViewer顯示LocalReport及ServerReport
謝謝this 的答覆,
1.我不是要預設「報表產生器3.0」來開啟 test.rdl檔案,我是想有沒有辦法將test.rdl轉換成一個執行檔直接執行它,不要進入「報表產生器3.0」再按執行
2.參考那篇文章,好像不是vb的寫法,因為我是新手,所以不大會轉成VB方式,像文章裡
bsReport.DataSource = ds;
bsReport.DataMember = "DataTableName";
bsReport指的是要引用哪一個物件命名稱宣告??
還有最後二行要如何轉成 vb 宣告
ReportDataSource rdsData1 = new ReportDataSource("DataSetName_DataTableName", sReport);
rvViewer.LocalReport.DataSources.Add(rdsData1);
謝謝您~ -
1) RDL檔案可以部署到SQL Server的Reporting Service, 有權限的使用者就可以直接用瀏覽器開啟瀏覽, 但無法轉換成執行檔
2) 這篇文件主要可以用來建立LOCAL REPORT與SERVER REPORT的了解, 程式碼倒是先大約瀏覽即可
謝謝this 的答覆,
1.因無法轉成單一報鰾檔執行,所以使用VB程式去引入RDL報表(如那篇文章的方式)或使用部署到SQL Server的Reporting Service方式都會啟用「報表產生器3.0 」來開啟RDL檔案是嗎?
2.我有安裝sql server 2012 但裡面沒看到Reporting Service,請教要用甚方式加入嗎?
謝謝幫忙
-
Crystal Report不支援Visual Studio Express版本, 請參考:Crystal Reports for Visual Studio Express
-
Crystal Report不支援Visual Studio Express版本, 請參考:Crystal Reports for Visual Studio Express
我網路上有找到 CRforVS_13_0_5.exe ,安奘後在 vs2012 express版本上可以使用嗎?
謝謝您^^ -
因為Crystal Report的文件已說不支援Visual Studio Express版, 所以建議您可以嘗試安裝看看
我有到下面網址
http://scn.sap.com/docs/DOC-7824
選擇第一攔Support Pack 12(v.13.0.12.1494)下載 CRforVS_13_0_12.exe 壓縮檔
安裝時出現 錯誤1904 無法註冊模組 C:\Program Files(x86)\SAP .....
HRESULT -2147024769.請聯絡您的支援人員
之錯誤訊息
是作業系統的關係嗎?我作業系統是使用64位元的,有沒有for 64位元的? 謝謝幫忙
-
-
這個連結放的好像是Support Pack
後來下載CRforVS_13_0_15.exe就ok了哦,好像會自動判定32位元或64位元去安裝
現在遭遇的新問題是form裡面的日期變數值如何傳到另一個form水晶報表所設定的參數欄位
我在水晶報表(.prt)定義2個參數欄位beg_w,end_w
假設上層是form1,下層是form2(內含水晶報表)
form1按btn鍵時會去執行Form2.Show()
要如何將form1裡的日期變數傳到水晶報表所設定的參數欄位beg_w,end_w呢?
可以再幫忙嗎? 謝謝您
假上 form1 裡的起迄日期處理後分別儲存在beg_t,end_t,要如何傳到form2水晶報表所設定的參數欄位beg_w,end_w呢?
以下是form2.vb內容Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared Public Class Form2 Private Sub CrystalReportViewer1_Load(sender As Object, e As EventArgs) Handles CrystalReportViewer1.Load Dim ParamFields As New CrystalDecisions.Shared.ParameterFields() Dim paramField As New CrystalDecisions.Shared.ParameterField() Dim discreteVal As New CrystalDecisions.Shared.ParameterDiscreteValue() Dim paramField2 As New CrystalDecisions.Shared.ParameterField() Dim discreteVal2 As New CrystalDecisions.Shared.ParameterDiscreteValue() paramField.ParameterFieldName = "beg_w" ParamFields.Add(paramField) discreteVal.Value = CDate("2015/10/10") 'discreteVal.Value = CType(Me.Owner, Form1).beg_t paramField.CurrentValues.Add(discreteVal) paramField2.ParameterFieldName = "end_w" ParamFields.Add(paramField2) discreteVal2.Value = CDate("2015/12/31") 'discreteVa2.Value = CType(Me.Owner, Form1).end_t paramField2.CurrentValues.Add(discreteVal2) CrystalReportViewer1.ParameterFieldInfo = ParamFields End Sub End Class
以下是form1.vb內容
Public Class Form1 Dim f2 As Form2 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load f2 = New Form2() f2.Owner = Me End Sub Private Sub salesReportDisplay_Click(sender As Object, e As EventArgs) Handles salesReportDisplay.Click Dim beg_t, end_t As Date beg_t = CDate(ComboBox1.SelectedItem.ToString + "/" + ComboBox2.SelectedItem.ToString + "/" + TextBox1.Text) end_t = CDate(ComboBox3.SelectedItem.ToString + "/" + ComboBox4.SelectedItem.ToString + "/" + TextBox2.Text) End Sub End Class
discreteVal.Value = CDate("2015/10/10")
discreteVal2.Value = CDate("2015/12/31")
上面二行可以正常執行,下面註解二行語法有問題
'iscreteVal.Value = CType(Me.Owner, Form1).beg_t
'discreteVal2.Value = CType(Me.Owner, Form1).end_t
會出現beg_t及end_t不是form1的成員,
請教這二行要如何改才可以把 form1 裡beg_t及beg_t傳値給 form2 水晶報表的beg_w及beg_w?
謝謝您
-
您可以於[屬性]視窗把Form1的beg_t和end_t的Modifier屬性的內容值變更成:Friend, 再試試看
Form2.vb加了那二行
Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared Public Class Form2 Friend beg_t As Date Friend end_t As Date Private Sub CrystalReportViewer1_Load(sender As Object, e As EventArgs) Handles CrystalReportViewer1.Load Dim ParamFields As New CrystalDecisions.Shared.ParameterFields() Dim paramField As New CrystalDecisions.Shared.ParameterField() Dim discreteVal As New CrystalDecisions.Shared.ParameterDiscreteValue() Dim paramField2 As New CrystalDecisions.Shared.ParameterField() Dim discreteVal2 As New CrystalDecisions.Shared.ParameterDiscreteValue() paramField.ParameterFieldName = "beg_w" ParamFields.Add(paramField) discreteVal.Value = CDate("2015/10/10") 'discreteVal.Value = CType(Me.Owner, Form1).beg_t paramField.CurrentValues.Add(discreteVal) paramField2.ParameterFieldName = "end_w" ParamFields.Add(paramField2) discreteVal2.Value = CDate("2015/12/31") 'discreteVa2.Value = CType(Me.Owner, Form1).end_t paramField2.CurrentValues.Add(discreteVal2) CrystalReportViewer1.ParameterFieldInfo = ParamFields End Sub End Class
discreteVal.Value = CType(Me.Owner, Form1).beg_t
beg_t位置會出現紅色錯誤修正選項問我Form1中產生beg_t的欄位
可是我Form1裡原本就有宣告Dim beg_t, end_t As Date了
我要讓它在Form1中產生beg_t的欄位嗎?
謝謝回覆