2014-02-07 65 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

相关问题