none
有關 ReportViewer 問題 RRS feed

  • 問題

  • 我使用「報表產生器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
    同時會出現尚未指定報表定義的來源(路徑都有檢查正確)之錯誤訊息 
    不知是哪裡出問題,麻煩幫忙,謝謝 

    2015年12月24日 上午 12:44

解答

  • 不要產生新爛位, 如果是自已宣告的變數, 例如:

    Dim beg_t, end_t As Date

    請改成:

    Friend beg_t, end_t As Date

    • 已標示為解答 alung_168 2016年1月6日 上午 12:51
    2016年1月4日 上午 07:04

所有回覆

  • 1) 使用滑鼠右鍵點中test.rdl, 執行[開啟檔案 | 選取預設程式]功能, 再選擇喜好的預設程式

    2) 您可以看一下這篇文件, 以了解Local Report與Server Report的用法:ReportViewer顯示LocalReport及ServerReport

    2015年12月24日 上午 04:15
  • 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);
    謝謝您~

       
    2015年12月24日 上午 07:57
  • 1) RDL檔案可以部署到SQL Server的Reporting Service, 有權限的使用者就可以直接用瀏覽器開啟瀏覽, 但無法轉換成執行檔

    2) 這篇文件主要可以用來建立LOCAL REPORT與SERVER REPORT的了解, 程式碼倒是先大約瀏覽即可

    2015年12月25日 上午 03:56
  • 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,請教要用甚方式加入嗎? 

    謝謝幫忙

    2015年12月26日 上午 12:20
  • 1) 報表產生器3.0是報表編輯工具, 編輯好的報表可以直接部署到SQL Server Reporting Service, 使用VB程式引用RDL報表不會啟用報表產生器3.0來開啟RDL檔案

    2) 您可以打開瀏覽器, 在網址列輸入: http://localhost/reports, 如果有看到管理報表的畫面,  就是己安裝, 如果要安裝, 可以使用[控制台->新增/移除程式]功能, 為SQL Server加入Reporting Service功能即可

    2015年12月26日 下午 12:31
  • 謝謝this 熱心的回覆, 我是使用vs2012 express 環境,可以免費下載安裝水晶報表使用嗎?

    安裝完後有沒有可以提供簡單的範例供參考呢? 呵呵~跟您要求哪麼多~真不好意思~謝謝您^^

    2015年12月29日 上午 04:46
  • Crystal Report不支援Visual Studio Express版本, 請參考:Crystal Reports for Visual Studio Express

    2015年12月29日 下午 02:16
  • Crystal Report不支援Visual Studio Express版本, 請參考:Crystal Reports for Visual Studio Express

    謝謝this 熱心的回覆,

    我網路上有找到 CRforVS_13_0_5.exe ,安奘後在 vs2012 express版本上可以使用嗎?

    謝謝您^^
    2015年12月30日 上午 01:19
  • 因為Crystal Report的文件已說不支援Visual Studio Express版, 所以建議您可以嘗試安裝看看
    2015年12月30日 上午 07:19
  • 因為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位元的? 謝謝幫忙

    2015年12月30日 上午 08:58
  • 這個連結放的好像是Support Pack

    2015年12月31日 上午 01:58
  • 這個連結放的好像是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呢?

    可以再幫忙嗎? 謝謝您

    2016年1月1日 上午 12:44
  • 這個連結放的好像是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?
    謝謝您

    2016年1月1日 上午 09:11
  • 您可以於[屬性]視窗把Form1的beg_t和end_t的Modifier屬性的內容值變更成:Friend, 再試試看
    2016年1月1日 下午 11:48
  • 您可以於[屬性]視窗把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的欄位嗎?

    謝謝回覆

    2016年1月4日 上午 12:26
  • 不要產生新爛位, 如果是自已宣告的變數, 例如:

    Dim beg_t, end_t As Date

    請改成:

    Friend beg_t, end_t As Date

    • 已標示為解答 alung_168 2016年1月6日 上午 12:51
    2016年1月4日 上午 07:04
  • 不要產生新爛位, 如果是自已宣告的變數, 例如:

    Dim beg_t, end_t As Date

    請改成:

    Friend beg_t, end_t As Date

     所以應該在form1裡宣告,而不是form2裡宣告,可以了哦,謝謝您

    後有遇到跨不同form傳變數値執行時都可以使用friend來作宣告?

    不好意思再另請教您有用過componentone軟體嗎謝謝幫忙

    2016年1月6日 上午 12:51
  • 將變數定義成Friend表示允許同一個專案的其他Form使用, 跨專案就要用Public

    ComponentOne的軟體以前用過, 一段時間沒有用了

    2016年1月6日 上午 01:52
  • 將變數定義成Friend表示允許同一個專案的其他Form使用, 跨專案就要用Public

    ComponentOne的軟體以前用過, 一段時間沒有用了

    前天有接了一系統(沒有留下系統使用說明文件),打開一方案(.sln),會出現
    About ComponentOne C1TrueDBGrid 
    Version: 1.3.20044.40922
    使用版權的畫面
    我是否要再安裝ComponentOne執行上才不會出問題?
    若要安裝,請教我要裝哪一版本呢?謝謝幫忙

    2016年1月6日 上午 03:27