1

我有一个会话变量,它保存当前登录用户的详细信息。我想根据变量运行查询并将其显示在Grid view中。我想用会话变量替换网格视图的默认值,但这不起作用。

谁能指出我正确的方向?

这是我尝试过的:

<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>
4

3 回答 3

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>
于 2013-07-28T21:13:52.947 回答
3

Selecting您可以在 SqlDataSource 使用数据源的事件执行 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,并以编程方式修改其参数值。

于 2013-07-26T04:17:16.377 回答
0

Sessionobject inASP.NET是服务器端状态维护变量之一。

更多你可以在这里找到。

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

所以假设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();
   }
}

只需确保仅在流程的早期分配/创建后才能访问该变量。

于 2013-07-25T21:48:19.300 回答