2012-03-28 40 views
0

對象聲明在邏輯斷點中,如果條件 - 邏輯符:對象宣言如果條件 - vb.net

If mycondition = True Then 
    Dim objrpt As New CrystalReport1 
Else 
    Dim objrpt As New CrystalReport2 
End If 

objrpt.SetDataSource(ds.tables( 「XXX」))

我正在上面一行的錯誤說: objrpt不是由於其保護級別宣稱它可能無法訪問

我同意它可能無法訪問,如果條件不滿足 - 但這裏 如果它沒有達到它將採取CrystalReport2知道?

回答

0

問題是您的變量必須聲明在If聲明之外。 If聲明中聲明的變量不能從外部訪問。

Dim objrpt As ReportDocument 
If mycondition = True Then 
    objrpt = New CrystalReport1 
Else 
    objrpt = New CrystalReport2 
End If 
objrpt.SetDataSource(ds.tables("xxx")) 
+0

沒有它不工作。我試圖爲crystalreport創建一個對象 - 但它不允許我 - 並且我沒有爲crystalreport找到任何選項,但是我們可以創建crystalreport文檔/文件,如crystalreport1或2 – Sensa 2012-03-28 18:38:29

+0

下面的代碼工作正常 - 但它很有趣邏輯:-) 如果GLB_SelectedRPT = 「3B」 然後 昏暗objrpt作爲新CommissionRpt3B objrpt.SetDataSource(StrongDS.Tables( 「mytempcomm」)) CrystalReportViewer1.ReportSource = objrpt 否則 昏暗objrpt作爲新CommissionRpt3BPlus objrpt。 SetDataSource(StrongDS.Tables(「mytempcomm」)) CrystalReportViewer1.ReportSource = objrpt End If – Sensa 2012-03-28 18:42:49

+0

我不熟悉水晶報告,但可能會有一個通信在CrystalReportViewer1和CrystalReportViewer2的接口上,例如ICrystalReport。在這種情況下,'objrpt'變量應該是這種類型的。如果它們是兩種截然不同的類型,那麼你不能期望在同一個變量中使用兩者。 – 2012-03-28 20:18:36

0

下面的代碼做工精細 - 但它在邏輯搞笑:-)

If GLB_SelectedRPT = "3B" Then 
    Dim objrpt As New CommissionRpt3B 
    objrpt.SetDataSource(StrongDS.Tables("mytempcomm")) 
    CrystalReportViewer1.ReportSource = objrpt 
Else 
    Dim objrpt As New CommissionRpt3BPlus 
    objrpt.SetDataSource(StrongDS.Tables("mytempcomm")) 
    CrystalReportViewer1.ReportSource = objrpt 
End If 

問候, 森薩