2014-02-07 90 views
1

到目前爲止,我們能夠通過reportviewer將形式變量傳遞給我們的報告。如何將值作爲會話變量傳遞給參數?

以下是我們目前的代碼,效果很好。

標記

<table> 
     <tr> 
      <td align="center" colspan="2"> 
       <asp:Label runat="server" ID="lblUser" Text="Enter UserName" /> 
      </td> 
     </tr> 
     <tr> 
      <td align="center"> 
       UserName:&nbsp;<asp:TextBox runat="server" ID="UserName" Width="75px" /> 
      </td> 
      <td> 
       <asp:Button runat="server" ID="btnGetUser" Text="Print" /> 
      </td> 
     </tr> 
    </table> 

Server代碼:

Sub Run_Report(ByVal sel As String) 
    ReportViewer1.Reset() 
    ReportViewer1.LocalReport.DataSources.Clear() 
    Dim params_user(0) As ReportParameter 


    Select Case which.Value 

     Case "R" 
      ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", ObjectDataSource1.ID)) 
      ReportViewer1.LocalReport.ReportPath = "GetReceits.rdlc" 
      ReportViewer1.LocalReport.Refresh() 
      ReportViewer1.LocalReport.EnableExternalImages = True 
      params_user(0) = New ReportParameter("UserName", UserName.Text, False) 
      ReportViewer1.LocalReport.SetParameters(params_user) 

    End Select 
End Sub 

然而,由於安全方面的原因,我們一直要求通過會話變量來報告。

這樣,用戶就不必輸入用戶名來打印報告。

我試圖改變這一行:

params_user(0) = New ReportParameter("UserName", UserName.Text, False) 

params_user(0) = New ReportParameter("UserName", Session("UserName").ToString, False) 

但是當我試圖運行它,我得到:

Object reference not set to an instance of an object. 

我該如何解決這個問題?

+0

'Session( 「UserName」)'無效肯定 –

回答

0

如果這個工程:

params_user(0) = New ReportParameter("UserName", UserName.Text, False) 

而這將引發一個NullReferenceException:

params_user(0) = New ReportParameter("UserName", Session("UserName").ToString, False) 

然後好像這樣Session("UserName")爲空。

兩個解決這一問題將是要麼

  1. 在頁面加載填充Session("UserName")(如果它是空的),或
  2. 在呼叫使用User.Identity.Name(如果你的用戶已經通過身份驗證以某種方式) 。

選項1
在你的Page_Load代碼,你可以這樣做:

If (Session("UserName") Is Nothing) Then 
    Session("UserName") = "the user name" 
End If 

選項2
如果您正在驗證用戶已經,你應該能夠傳遞Page.User.Identity.Name value

params_user(0) = New ReportParameter("UserName", User.Identity.Name, False) 
+0

@ jadarney127,嗨,並感謝所有的答覆。 User.Identity.Name假定您正在通過Active Directory進行身份驗證,否? 我們沒有使用Active Directory。 選項1是一個可行的選項,但由於某種原因,我仍然得到'對象引用未設置爲對象的實例' 我創建了一個hiddenField標記並將其稱爲UserHide。 然後,我將該Uhide作爲控件ID傳遞給SelectParameters。 ' 如何將它與yuor Option 1解決方案結合使用? –

+0

@ChidiOkeh我認爲User.Identity.Name會被填充,即使你使用的是表單驗證(我之前用過這種方式)。根據您剛剛提供的附加信息,我會更新我對選項1的回答。 – jadarnel27

+0

順便說一句,@ChidiOkeh,你需要改變你的ControlParameter標記爲'PropertyName =「Value」(asp:HiddenField使用Value屬性來存儲信息,而不是Text屬性。UserHide是否有用戶名當你的頁面加載時 – jadarnel27

相關問題