2013-07-25 54 views
1

我有一个保存当前登录用户详细信息的会话变量。我想运行基于该变量的查询并将其显示在格网视图中。 我想用会话变量替换网格视图的默认值,但没有奏效。在ASP.Net Gridview中使用会话变量

任何人都可以指向正确的方向吗?

这是我的尝试:在ASP.NET

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:..... %>" 

    SelectCommand="SELECT [Username], [Password], [CustomerName], [CustomerAddress], [Contact] FROM [Customers] WHERE ([Username] = @Username)"> 
    <SelectParameters> 
     <asp:Parameter DefaultValue="session[new]" Name="Username" Type="String" /> 
    </SelectParameters> 
</asp:SqlDataSource> 
+1

请发布您到目前为止尝试过的内容。 –

+0

这是我试过的; “ SelectResult =”SELECT [Username],[Password],[CustomerName],[CustomerAddress],[Contact] FROM [Customers] WHERE([Username] = @Username)“> isaiah

回答

0

Session对象是服务器端的状态维护变量之一。

更多您可以找到here

会话变量只是存储您分配给它的任何值。简而言之,即使您在其他页面上创建了该变量,也可以在任何其他页面上访问此变量。

所以想在page1.aspx你做的事:

Session["uniqueName"] = GetGridViewData(); //you can store anything. 

其中GetGridViewData()签名是假设,如:

public DataTable GetGridViewData(); 

然后page2.aspx(或任何其他网页),你可以这样做:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(Session["uniqueName"]!=null) 
    { 
     //typecast it to your datastructure or whatever you assigned into it 
     DataTable gridDataSource = (DataTable)Session["uniqueName"]; 

     //any custom logic you want to perform on gridDataSource 
     gridView1.DataSource = gridDataSource; 
     gridView.DataBind(); 
    } 
} 

只要确保您只访问变量在流程中早些时候分配/创建之后。

+0

Manish感谢您的回答;我会为此付出。 – isaiah

3

您可以在SqlDataSource使用数据源的Selecting事件执行Query之前提供Session变量值。使用OnSelecting属性在标记中设置此事件。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:..... %>" 
    OnSelecting="SqlDataSource1_Selecting" 
    SelectCommand="SELECT [Username], [Password], [CustomerName], [CustomerAddress], [Contact] FROM [Customers] WHERE ([Username] = @Username)"> 
    <SelectParameters> 
     <asp:Parameter Name="Username" Type="String" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

在选择事件处理程序,你做如下:

protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
    { 
      if(Session["UserName"]!=null) 
      { 
      // do this only when Session Variable stores as a string the Username 
      e.Command.Parameters["@Username"].Value = Session["UserName"]; 
      } 
     else 
      { 
       // assign the default value if session variable is Null 
       e.Command.Parameters["@Username"].Value ="DefaultValue"; 
      } 

    } 

在此事件处理程序,您可以访问是关于通过 SqlDataSourceSelectingEventArgs.Command属性要执行的命令,并修改其参数值以编程方式。

3

我最终做的和FlopScientist的答案类似。我发现DataSource实际上有一个选项,可以在设计视图中选择一个会话变量,它具有以下代码:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:..... %>" 

SelectCommand="SELECT [Password], [CustomerName], [CustomerAddress], [Contact], [Username] FROM [Customers] WHERE ([Username] = @Username)"> 



<SelectParameters> 
      <asp:SessionParameter Name="Username" SessionField="mySessionVariable" Type="String" /> 


</SelectParameters> 
</asp:SqlDataSource>