我有以下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()
答案 0 :(得分:1)
首先尝试使用LinkButton
PostBackUrl
事件代替LinkButton
。
当您点击OnClientClick
然后点击Select Query
事件时,请执行一些步骤。
将Session
中传递的参数值存储在Textbox's
中。
它可能来自Label's
,Session("Bedrijf") = Bedrijf.Text
等任何地方。如果它来自控件,则存储在会话中
Bedrijf
我假设TextBox
值来自ID Bedrijf.Text
的{{1}}。所以我将该值保存为session
。只需存储其他控件值。
注意:仅存储已用于选择查询的值。
将所有值存储到会话中。您只需将其重定向到下一页。
在第2页上做你想做的事。
点击back button
点击同时将pagename
设置为session
个变量。现在您正在page2.aspx
,因此请在session
中设置其名称像
Session("prevpagename") = "Page2"
点击返回按钮后,它会重定向到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
您必须遵循此类情况。
希望你理解并为你工作。
答案 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