2013-07-25 85 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>