存储搜索结果GridView

时间:2013-06-06 08:54:00

标签: asp.net store

我有以下GridView:

asp:GridView ID="GridView1" 
    runat="server" 
    AutoGenerateColumns="False" 
    DataKeyNames="ID" 
    gridlines="None"
    cellpadding="15"
    width="980px"   
    ItemStyle-backcolor="#ebecf0"
    AlternatingItemStyle-backcolor="#ebecf0" 
    AllowPaging="True" 
    PageSize="4" 
    onpageindexchanging="GridView1_PageIndexChanging" 
    datasourceid="SqlDataSource2"
    >

这个选择命令:

"SELECT * FROM [tbl_Project] INNER JOIN tbl_Cat      
ON tbl_Project.CatID = tbl_Cat.Cat_ID 
INNER JOIN tbl_Klant   
ON tbl_Project.KlantID = tbl_Klant.Klant_ID 
WHERE (([Titel] LIKE '%' + @Titel + '%') 
AND  ([CatID] = CASE WHEN @CatID = -1 THEN [CatID] ELSE @CatID END) 
AND ([Bedrijf] LIKE '%' + @Bedrijf + '%') 
AND ([Website] LIKE '%' + @Website + '%'))" 

这允许用户搜索数据库中的记录。在GridView1中,我有一个详细信息按钮:

 <asp:LinkButton ID="klant" runat="server"
    Text='<%#Eval("Bedrijf") %>'
    PostBackUrl='<%# "klant_wijzigen.aspx?Klant_ID="+Eval("Klant_ID").ToString()%>'>
    </asp:LinkButton>

这会将用户带到一个新页面,其中包含该特定主题的详细信息(基于ID)

问题

但是当用户点击“返回”时,会清除seaarch结果。如何存储搜索到的记录并在PageLoad上显示。

我通过cookies和Session尝试了它,但它没有工作。

修改

我的选择尝试:

Session("Test") = GridView1
GridView1 = Nothing

' Retrieve GridView from Session
GridView1 = DirectCast(Session("Test"), GridView)
GridView1.DataBind()

4 个答案:

答案 0 :(得分:1)

首先尝试使用LinkButton PostBackUrl事件代替LinkButton

当您点击OnClientClick然后点击Select Query事件时,请执行一些步骤。

  1. Session中传递的参数值存储在Textbox's中。

    它可能来自Label'sSession("Bedrijf") = Bedrijf.Text 等任何地方。如果它来自控件,则存储在会话中

    Bedrijf

    我假设TextBox值来自ID Bedrijf.Text的{​​{1}}。所以我将该值保存为session。只需存储其他控件值。

    注意:仅存储已用于选择查询的值。

    将所有值存储到会话中。您只需将其重定向到下一页。

  2. 在第2页上做你想做的事。

  3. 点击back button点击同时将pagename设置为session个变量。现在您正在page2.aspx,因此请在session中设置其名称像

    Session("prevpagename") = "Page2"
    
  4. 点击返回按钮后,它会重定向到page 2 to page 1这样的同一页面,现在page 1 Page_Load事件再次绑定您的grid view

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
          // Here firstly check the session variables for `pagename`
          If Session("prevpagename") = "Page2" Then
          // then directly assign the values of the parameters that you have store in session in select query.
          // After retrieving the values from the database filter by the parameters you have passed bind your `Grid View` again like
          gridview.DataSource = reader2
          gridview.DataBind()
          // Here reader2 is having the all return data that comes from your select query.You may save them on `DataTable`,`DataSet` as well and directly assign it to `DataSource` event of `GridView`.
          Else
          // another code.
          End If
        End If
    End Sub
    
  5. 您必须遵循此类情况。

    希望你理解并为你工作。

答案 1 :(得分:1)

尝试Cache你的牌桌。与Cache["SOURCE"] = YourSearchDataTable;类似,然后按照以下方式调用它:

DataTable dt = (DataTable)Cache["SOURCE"];
GridView1.DataSource = dt;
GridView1.DataBind();

只是会话和Cookie的建议和替代方案。

答案 2 :(得分:0)

  

会话(“测试”)= GridView1

我认为这很糟糕,而是在会话b4重定向中保存您的选择查询,同时将详细信息页面配置为使用somequery字符串值重定向,以便您知道必须使用来自会话的select查询。

答案 3 :(得分:0)

我通过在这样的选择索引更改上存储会话来解决这个问题:

Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Session("Categorie") = DropDownList1.SelectedValue
End Sub

Protected Sub txtKlant_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Session("Klant") = txtKlant.Text
End Sub

Protected Sub txtWebsite_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Session("Website") = txtWebsite.Text
End Sub

Protected Sub txtTitel_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Session("Titel") = txtTitel.Text
End Sub

然后在page_load上回调它:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    Cookie()

    If Not Page.IsPostBack Then           
        DropDownList1.SelectedValue = Session("Categorie")
        txtKlant.Text = Session("Klant")
        txtWebsite.Text = Session("Website")
        txtTitel.Text = Session("Titel")
        GridView1.DataBind()
    End If

End Sub